我有一个处理队列中操作的线程。基本上,永远循环。如果队列中有操作,则将操作出列并执行。如果没有操作,请等到您被告知有操作。
在伪代码中(暂时忽略关键部分):
public class OperationHandler extends Thread {
private Deque<Operation> queue = new LinkedList<>();
public void run() {
while (true) {
if (queue isn't empty) {
dequeue the operation and execute it
}
else {
wait;
}
}
}
public void operationRequired() {
add operation to queue
notify yourself / return to infinite while loop
}
}
基本上,一个 Controller 类初始化 thisOperationHandler
并start()
s 它。每当一些请求到达时,控制器就会调用operationRequired
线程,以便在无限while
循环中异步处理操作。有什么办法可以做到这一点?
我试过了this.wait()
,this.notify()
但我要么死锁,要么IllegalMonitorStateException
取决于不同的同步块。