是否可以使用带有两个AtomicInteger的线程安全方法?

我想编写一个线程安全的方法sum(),但是我不确定是否可以使用两个AtomicIntegers使其安全,还是必须使用同步块?

class A {

   private AtomicInteger a = new AtomicInteger();
   private AtomicInteger b = new AtomicInteger();

   public void sum(int c) {
      a.set(a.get() + b.get() + c);
   }
}
vbsnowy 回答:是否可以使用带有两个AtomicInteger的线程安全方法?

The rules for evaluation order in Java意味着您将始终遵循一系列不重叠的锁:A(获取)-> B(获取)-> A(设置)。这样您就不会遇到任何阻塞问题,因为这些锁不会相互干扰。但是请注意,这是一种竞争条件:线程1可能先读取A,然后读取B。在线程1设置A之前,线程2可以读取A和B。最终值将是线程之一'产生的总和,但另一个将丢失。

,

可以使用AntomicInteger的特定方法来解决此问题。您不需要打破AtomicInteger这个词,它是线程安全的。 只需检查AtomicInteger的JavaDocs,就会显示诸如AtomicInteger.getAndAdd之类的可用于此目的的方法。

本文链接:https://www.f2er.com/3040676.html

大家都在问