2017-04-19 137 views
0
設置

我很困惑,當我讀了RxJava的源代碼: 是否有必要分配「資源」設置?是否需要分配「資源」在RxJava

在Rxjava類CompositeDisposable 代碼:

@Override 
    public boolean add(Disposable d) { 
     ObjectHelper.requireNonNull(d, "d is null"); 
     if (!disposed) { 
      synchronized (this) { 
       if (!disposed) { 
        **OpenHashSet<Disposable> set = resources;** 
        if (set == null) { 
         set = new OpenHashSet<Disposable>(); 
         resources = set; 
        } 
        set.add(d); 
        return true; 
       } 
      } 
     } 
     d.dispose(); 
     return false; 
    } 

代碼我修改:

@Override 
    public boolean add(Disposable d) { 
     ObjectHelper.requireNonNull(d, "d is null"); 
     if (!disposed) { 
      synchronized (this) { 
       if (!disposed) { 
        OpenHashSet<Disposable> set = resources; 
        if (resources == null) { 
         resources = new OpenHashSet<Disposable>(); 

        } 
        resources.add(d); 
        return true; 
       } 
      } 
     } 
     d.dispose(); 
     return false; 
    } 
+0

請向在GitHub上的倉庫你的問題:https://github.com/ReactiveX/ RxJava –

+0

'資源'可能會或可能不會爲空。 –

回答

0

它避免重讀實例字段。編譯器/ JIT可能會或可能不會優化您所建議的樣式,或者根本不會 - 我們通常不會採取這樣的機會。另外,該圖案可以與volatile字段可能是昂貴的重新讀取出現,並且還每個時間可能會產生不同的值,無效代碼的意圖。

(也請不要打開一個問題/ PR試圖改變這種格局,因爲它會被拒絕。)

相關問題