gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:35:57 24 4
gpt4 key购买 nike

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

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

最佳答案

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

供引用,the code in 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 指令)

关于java - AtomicLong 中的 getAndAdd 方法是否会导致线程等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41502105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com