AtomicBooleanに同期?

JDV:

私は私に働いているアプリケーションでは、次のコードスニペットを見つけました:

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によれば、これは正しくないAtomicBooleanと一緒にsynchronized、それはオブジェクトをブロックするように期待しています。

私の質問は:このメソッドを書き換えるための正しい方法は何ですか?私の代わりに、ブール属性を持つロックオブジェクト一緒の使用について読んだが、このロックのために2つの新しい属性を導入するためにちょっと不器用表示されます。

編集:以下のコメントで述べたように:私は意図はそれが2つのであると思いsynchronizedブロック、AtomicBoolean変更することはできず、1つのスレッドのいずれかであることながらsynchronized、ブロック、どれも他のそのようなブロックを入力することができます。

ユージン:

ただ交換するsynchronized (this.atomicBoolean) {両方の方法から一部を、AtomicBoolean::getそしてAtomicBoolean::setすでにアトミックです。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=222750&siteId=1