在AtomicBoolean上同步?

Jdv*_*Jdv 2 java multithreading synchronized atomicboolean java-8

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

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

根据FindBugs的说法,这是不正确的,因为我不能与AtomicBoolean一起使用,synchronized并且不能期望它会阻塞对象。

我的问题是:重写此方法的正确方法是什么?我已经读过有关将锁对象与布尔属性一起使用的信息,但是为该锁引入两个新属性似乎有点笨拙。

编辑:正如下面的注释中所述:我认为目的是在两个synchronizedAtomicBoolean中不能更改,并且当一个线程位于其中一个synchronized块中时,不能再输入其他任何这样的块。

Eug*_*ene 8

只需替换这synchronized (this.atomicBoolean) {两种方法中的零件,AtomicBoolean::get并且AtomicBoolean::set已经是原子的。