2017-08-15 5 views
1

スリングスレッドプールのスレッドが次の文を実行しないようにするにはどうすればよいですか。serv.getService()。start(tic、info);実行がすでに1つのスレッドによって完了している場合は、 を何回か使用しますか?スリングスレッドプール内の複数のスレッドが同じステートメントを実行しないようにするにはどうすればよいですか?

フラグ_alreadyExecutedを使用してみましたが、それは役に立たないようです。

ログイン:https://i.stack.imgur.com/x8jZw.png私のコードは次の通りである

 private void sendBlock(service serv, String tic, Resource block, 
    Update update, Info info, ResourceResolver resolver) throws 
    IOException { 
    private Boolean _alreadyExecuted = Boolean.FALSE; 
    if(tic != null) { 
     String tic = null; 
     if(!_alreadyExecuted){ 
      getLogger().info("Before startSubmission. Currently _alreadyexecuted is " +_alreadyExecuted); 
      serv.getService().start(tic, info); 
      getLogger().info("After startSubmission, _alreadyexecuted is about to change to true. Currently _alreadyexecuted is " +_alreadyExecuted); 
      _alreadyExecuted = Boolean.TRUE; 
      getLogger().info("After startSubmission, _alreadyexecuted has been changed to true. Currently _alreadyexecuted is " +_alreadyExecuted); 
     } 
    } 
} 
+0

あなたの質問は既に回答済みですが、あなたのユースケースが何だったか尋ねることができますか?私は私のAEMプロジェクトで揮発性を使う必要性に遭遇したことはありません。 – mickleroy

+0

ジョブの処理中に、ジョブスレッドプールの2つのスレッドが同じステートメントを実行して、重複要求が発生しました。これは問題を引き起こしていました。 – Grace

答えて

0

変更フィールドvolatileへ:マルチスレッド実行環境で

private volatile Boolean _alreadyExecuted = Boolean.FALSE; 

、スレッドがキャッシュ許可されていますフィールドの値(通常はdo)。 volatileキーワードは、すべてのスレッドがフィールドに割り当てられた現在の(同じ)値を使用するようにします。

+0

素早い対応をしていただきありがとうございます。それは私のために働いた! – Grace

関連する問題