用于实时消息处理的java多重执行
我已经对实时发送的消息实现了线程池执行器
以下是一些相关的示例代码:
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。状态变为true时,我不希望其他消息进程以相同的方式进行计算。对于这种情况,完全删除线程是否更好?或者,在维护线程执行的同时,是否有办法避免这种行为?谢谢你的回复
# 1 楼答案
根据您的评论,听起来您需要同步对in_状态变量的访问和分配
您可以这样做:
还要确保在StateInfo中将in_state变量声明为volatile