我已经在实时消息上实现了一个线程池执行器。
这是一些相关的示例代码:
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 变为真时,我不希望以同样的方式评估其他消息进程。在这种情况下完全删除线程会更好吗?或者在保持线程执行的同时有办法解决这个问题吗?感谢您的任何回复。