0

リアルタイムで受信するメッセージにスレッド プール エグゼキューターを実装しました。

関連するコード例を次に示します。

class MessageProcessor implements SomeListener{
     StateInfo stateInfo;
     ExecutorService pool;
     MessageProcessor(StateInfo stateInfo) {
       pool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
       this.stateInfo = stateInfo;
     }
     @Override
     void processMessage(final String messageComesInRealTime) {
         Runnable runner = new Runnable() {
           public void run() {
             if(!stateInfo.in_state) {
                 if(stateInfo.state == 1) {
                   stateInfo.in_state = true;
                   //do something with message
                   stateInfo.state = 2;
                 }
                 else if(stateInfo.state == 2) {
                  stateInfo.in_state = true;
                   //do something with message
                   stateInfo.state = 3;
                 }
                 //etc...
              }
         } 
       };
       pool.execute(runner);
       //etc...
    }
}

processMessage メソッドでは、メッセージがリアルタイムで高速に到着し、複数のメッセージが同時に処理されます。しかし、stateInfo.state が true になったときに、他のメッセージ プロセスが同じように評価されるのは望ましくありません。このシナリオでは、スレッドを完全に削除する方が良いですか? または、スレッドの実行を維持しながら、この動作を回避する方法はありますか? 返信ありがとうございます。

4

1 に答える 1