リアルタイムで受信するメッセージにスレッド プール エグゼキューターを実装しました。
関連するコード例を次に示します。
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 になったときに、他のメッセージ プロセスが同じように評価されるのは望ましくありません。このシナリオでは、スレッドを完全に削除する方が良いですか? または、スレッドの実行を維持しながら、この動作を回避する方法はありますか? 返信ありがとうございます。