【发布时间】:2013-07-05 17:56:52
【问题描述】:
我已经为实时发送的消息实现了一个线程池执行器。
这里是一些相关的示例代码:
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 变为真时,我不希望以同样的方式评估其他消息进程。在这种情况下完全删除线程会更好吗?或者在保持线程执行的同时有办法解决这个问题吗?感谢您的回复。
【问题讨论】:
-
我对你在这里做什么感到困惑。能说的详细点吗?
-
每当有新消息进来时,都会执行 processMessage 方法。当消息率很高时,有时会同时执行 2 个或更多相同的执行,即使 stateInfo.in_state 为 true。这是唯一的问题。
-
听起来你需要同步访问
StateInfo。
标签: java multithreading