gpt4 book ai didi

java - 在 AtomicBoolean 上同步?

转载 作者:行者123 更新时间:2023-12-02 10:51:32 27 4
gpt4 key购买 nike

在我正在开发的应用程序中,我发现了以下代码片段:

public class MyClass {

private AtomicBoolean atomicBoolean = new AtomicBoolean(false);

public void Execute() {
// Whole lot of business logic
// ....
synchronized (this.atomicBoolean) {
// Want to make sure that execution is stopped if Stop() was called
if (this.atomicBoolean.get()) {
throw new SpecificException("...");
}
// Some more business logic...
}
}

public void Stop() {
synchronized (this.atomicBoolean) {
this.atomicBoolean.set(true);
}
}
}

根据 FindBugs 的说法,这是不正确的,因为我不能将 AtomicBooleansynchronized 一起使用并期望它阻止该对象。

我的问题是:重写这个方法的正确方法是什么?我读过有关使用锁对象和 boolean 属性的文章,但为此锁引入两个新属性似乎有点笨拙。

编辑:如下面的评论所述:我认为目的是在两个同步块(synchronized block)中,AtomicBoolean 无法更改,而一个线程位于synchronized block 之一中,无法输入其他此类 block 。

最佳答案

只需替换这两个方法中的 synchronized (this.atomicBoolean) { 部分,AtomicBoolean::getAtomicBoolean::set 已经是原子。

关于java - 在 AtomicBoolean 上同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55514438/

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