gpt4 book ai didi

java - 如何使用 AtomicInteger 进行比较的情况

转载 作者:行者123 更新时间:2023-12-02 09:05:50 24 4
gpt4 key购买 nike

我有一个 AtomicInteger 变量:

AtomicInteger aInteger = new AtomicInteger(0);

访问该变量的线程之一需要检查其值并基于它来调用函数。这就是我的意思。

if(aInteger < maxAvailableConnectionSlots)
{
aInteger.incrementAndGet();
doSomething();
}
else
{
doSomething2();
}

所以我的问题是如何使上述代码线程安全?

最佳答案

你可以做这样的事情(未经测试):

do {
prev = aInteger.get();
next = prev + 1;
} while (prev < maxAvailableConnections && !aInteger.compareAndSet(prev, next));

boolean wasIncremented = prev < maxAvailableConnections;
if (wasIncremented) doSomething();
else doSomething2();

请注意,aInteger 可能会在循环和 if/else 之间发生变化,但只有在实际递增 aInteger 时,您才会调用 doSomething

关于java - 如何使用 AtomicInteger 进行比较的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33788605/

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