“委托”对线程安全类有何帮助?

pet*_*ter 2 java concurrency multithreading composition thread-safety

当我们谈论构造线程安全类时,我并没有真正理解“委托”的概念。这是什么意思?以及该策略如何有效地创建线程安全类?何时会失败?有人可以举个例子吗?

Bha*_*kar 5

关于使类具有线程安全性的“委派”是指该类包含对该类卸载了线程安全操作的其他某个类对象的引用。考虑一下,

class Delegator {  
    private final AtomicInteger counter = new AtomicInteger(0);


  public int getNextCounter(){
      return counter.incrementAndGet();
   }
 }
Run Code Online (Sandbox Code Playgroud)

在这里,Delegator类将线程安全委托给了它的component counter。显然,班级本来可以自己做这个counter操作,但是那将是在重新发明轮子。

委托需要谨慎使用。如果存在涉及多个变量的状态操作,则仅使这些变量操作中的每一个单独具有线程安全性是不够的,但是一起进行状态转换也应该是线程安全的。