gpt4 book ai didi

java - AtomicInteger 是如何工作的?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:32:40 26 4
gpt4 key购买 nike

没想到线程会这么难。无论如何,我能想到的在线程完成后执行函数的唯一方法是使用静态计数器在线程运行时递增。

if(++threadcounter==3){doSomething(); threadcounter =0;}

我发现这不是一个好主意,因为线程计数器有时永远达不到 4。

所以我用了原子整数

if(atomicint.incrementAndGet()==4){doSomething(); atomicint.set(0);}

计数器为 5 或 0,应用程序卡住。我不知道发生了什么。如何使用正确的计数器? 谢谢

编辑:

最佳答案

解决这个问题的最简单方法是使用一个好的老式锁:

boolean shouldDoSomething;
synchronized {
++threadCounter;
if (threadCounter == 4) {
threadCounter = 0;
shouldDoSomething = true;
}
else {
shouldDoSomething = false;
}
}
if (shouldDoSomething) doSomething();

这将在锁上产生争用,但会争夺一段非常非常简短的代码 - 加载、存储和一些算术指令。

您对 AtomicInteger 的使用是错误的,因为没有锁定或其他并发控制链接 incrementAndGetset,这意味着是潜在的竞争条件(值为 3,线程 A 递增到 4,线程 B 递增到 5,线程 A 设置为 0)。

关于java - AtomicInteger 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8148823/

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