假设我有一种方法可以高速处理实时事件消息。
对于每个调用(消息通过),我有多个想要跟踪的状态,并且我在下一次调用该方法时执行的处理类型取决于当前状态。
因为它的速率很高并且可能需要一些时间来处理并且在单个线程上,所以上一个调用可能不会在下一个调用之前完成。
如果我对每个方法调用使用异步多线程实现(例如线程池),那么可以同时执行多个调用,并且每个调用都会评估为相同的状态并且会发生相同类型的处理,这不是我想要的。我想确保如果变量的状态在其中一个线程调用中发生更改,那么其他线程将知道该状态。
我的问题是这种情况下最好的类型实现是什么(使用原子整数?同步?)对于我想确保它异步处理速率和每次调用的处理,但同时想要确保“同时”对线程的多个调用是状态感知的。顺序并不是那么重要。
IE:
state = false;//current state
a thread b thread (and vice versa if thread b or thread a "saw" it first)
------------------------------
| |
| |
sees false sees false (should "see" true)
changes to true changes to true (should not change to true)
| |
void processMessage(String message) {
Runnable runner = new Runnable() {
void run() {
if(track.in_state == true) {
if(track.state == 1) {
track.in_state = false;
//do something here
}
else if(track.state == 2) {
track.in_state = false;
//do something here
}
}
}
}
poolA.executor(runner);
//what happens here is that multiple threads are executed with same processing here
}
void processADifferentMessage(String message) {//a different but also dependent on the state tracker object
Runnable runner = new Runnable() {
void run() {
if(track.in_state == false) {
//do something here
}
}
};
//I also want to make sure that its state aware here as well in this thread pool
poolB.executor(runner);
}
感谢您的任何回复。