AtomicLong 中的 getAndAdd 方法是否会导致线程等待



我有一个运行多线程的程序,所有线程共享和进程都在单个 AtomicLong 变量上。它们中的每一个都将首先调用getAndAdd()方法来检索值并进一步处理。

如果所有线程同时运行,调用上述方法是否会导致一个线程等待另一个线程完成获取值?

线程

不是在等待(在Object::wait的意义上),它们是循环的,直到它们成功获取并添加到AtomicLong

作为参考,JDK 8 中的代码如下所示:

public final long getAndAddLong(Object o, long offset, long delta) {
  long v;
  do {
    v = getLongVolatile(o, offset);
  } while (!compareAndSwapLong(o, offset, v, v + delta));
  return v;
}

请注意,该方法可能是固有的(即它在运行时被更有效的东西所取代,通常是单个 CPU 指令)

最新更新