2017-04-19 101 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试图改变这种格局,因为它会被拒绝。)

相关问题