在我正在处理的应用程序中,我发现了以下代码片段:
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
我的问题是:重写此方法的正确方法是什么?我已经阅读了有关将锁对象与布尔属性一起使用的信息,但是为此锁引入两个新属性似乎有点笨拙。
编辑:如下面的评论中所述:我认为其意图是在两个块中,不能更改,并且当一个线程在其中一个块中时,不能输入其他此类块。synchronizedAtomicBooleansynchronized
德玛西亚99
HUX布斯
相关分类