2017-10-08 5 views
0

私は春のサービスクラスを持っている:Spring @Service内部のプリミティブなインスタンス変数をスレッドセーフにする方法は?

@Service 
public class MyService { 
    private boolean flag = false; 

    public void method1() { 
    if(!flag) 
    // do something 
    flag = true; 
    } 

    public void method2() { 
    if(!flag) 
    // do something 
    flag = true; 
    } 
} 

それはflagはスレッドセーフではないことは明らかです。サービスクラスのスコープを変更することなく、スレッドセーフにするためにはどのようなオプションが必要ですか?それは目的を解決する揮発性にすることができますか? 私はここに投稿する前に解決策を探していましたが、見つけられませんでした。

答えて

1

いずれかのメソッドが呼び出されると、ロジックを1回だけ実行しようとしていますか?はいの場合、@PostContructを使ってそれを行うことはできませんか?それ以外の場合は、フィールドでsynchronizedを使用して、マルチスレッドの利点を失うことができます。

0

あなたの目的は、同時実行制御

ためにJDKが提供する utilitiesのいくつかの種類を使用することをお勧め、あなたが method1method2が同時に実行したくないということであると思われます
関連する問題