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位新值.