2017-04-19 10 views
0

RxJavaのソースコードを読むと混乱しました: "リソース"を設定する必要はありますか?私が変更したRxJavaで設定するリソースを割り当てる必要があります

@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; 
    } 

コード: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 (resources == null) { 
         resources = new OpenHashSet<Disposable>(); 

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

GitHubのリポジトリであなたの質問をしてください。https://github.com/ReactiveX/ RxJava –

+0

'resources'はnullでもかまいません。 –

答えて

0

これは、再読み込みインスタンスフィールドを回避することができます。コンパイラ/ JITは、あなたが提案したスタイルを時間どおりに、あるいはまったく最適化していないかもしれません。通常、このような機会はありません。さらに、パターンはvolatileフィールドで表示され、再読み込みにコストがかかる可能性があり、コードの意図を無効にするたびに異なる値が返されることがあります。

(また、それが拒否されるように、このパターンを変更しようとする問題/ PRを開けないでください。)

関連する問題