我有一個處理隊列中的操作的線程。基本上,永遠循環。如果隊列中有操作,則使操作出列並執行。如果沒有任何操作,請等到有人告訴您。如何獲得Java線程來通知自己?
在僞代碼(忽略現在關鍵段):
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
}
}
基本上控制器類初始化此OperationHandler
和start()
這樣。每當有一些請求到達時,控制器會在線程上調用operationRequired
,以便在無限循環中異步處理操作。有什麼辦法可以做到這一點?
我試過this.wait()
和this.notify()
但我得到死鎖或IllegalMonitorStateException
取決於不同的同步塊。
你不能。這個問題沒有意義。您正在討論一個線程,但也涉及異步操作。你真的有至少兩個線程。請修改你的問題,這是有道理的。 – EJP
'operationRequired()'是從另一個線程調用的。 –