// 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/

10-10 19:11