// is this atomic?
public int size() {
return count;
}
请注意,可以通过其他线程中的其他方法来更改计数。
我知道整数读写是原子的,但是我不确定返回。
让我感到震惊的是,由于某种原因ArrayBlockingQueue锁定了它的size()方法。
最佳答案
众所周知,对原始int
的读写是原子的。返回基本上是读取并放置在内存中的其他位置。由于读取是原子的,因此不会发生竞争状况。您可以返回int
的上一个或下一个值。
在lock
中使用ArrayBlockingQueue
可能是出于可见性原因。 count
变量不是volatile
,因此,如果在此期间修改了队列,并且未进行某种锁定,则不能保证您看到count
的最新值。但是,由于读写是原子的,因此至少您永远不会看到最旧的16位旧值和最旧的16位新值。
关于java - 在Java中返回int是原子操作吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13669065/