在java中返回一个原子操作的int?

coh*_*dar 5 java multithreading atomic

// is this atomic? 
public int size() {
    return count;
}
Run Code Online (Sandbox Code Playgroud)

请注意,可以通过其他线程中的其他方法更改计数.

我知道整数读取和写入是原子的,但我不确定返回.

令我惊慌的是,由于某种原因,ArrayBlockingQueue锁定了它的size()方法.

Tom*_*icz 13

int您已经知道,对原语的读取和写入是原子的.返回基本上是读取并放置在内存中的其他位置.由于读数是原子的,因此不会出现竞争条件.您要么返回上一个值或下一个值int.

使用lockin ArrayBlockingQueue可能是由于可见性原因.如果在此期间修改了队列,则count变量不是volatile这样,如果没有某种锁定,则无法保证看到最近的count.但由于读写都是原子的,至少你永远不会看到最新的16位旧值和最新的16位新值.

  • +1提及可见性,这是​​重要的一点 (4认同)
  • 请注意,long和double的读取和写入不是原子的,只要该字段未声明为volatile. (3认同)