gpt4 book ai didi

java - AtomicInteger 条件检查线程安全

转载 作者:行者123 更新时间:2023-11-30 06:04:53 25 4
gpt4 key购买 nike

我怀疑下面是否是线程安全的,

// is this thread safe, final int MAX_COUNT = 3 ?
if (retryCount.get() < MAX_COUNT) {
// some other code
retryCount.getAndIncrement();
} else {
// reset count & some other code
retryCount.set(0);
}

上面的条件检查线程安全吗?

最佳答案

不,不是。

假设有两个线程 T1T2retryCount实际上包含 2值。
假设T1执行if(retryCount.get() < MAX_COUNT){ (评估为 true)但未达到 retryCount.getAndIncrement(); .
T1已暂停。 T2已恢复。
T2执行if(retryCount.get() < MAX_COUNT){这仍然被评估为 true。

所以你确定retryCount将被评估为 4 .

您需要显式同步,在本例中为 AtomicInteger 可能不需要:

synchronized(lock){
if(retryCount.get() < MAX_COUNT){
// some other code
retryCount.getAndIncrement();
}else{
// reset count & some other code
retryCount.set(0);
}
}

关于java - AtomicInteger 条件检查线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48309401/

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