キュー内の操作を処理するスレッドがあります。基本的に、永遠にループします。キューに操作がある場合は、操作をデキューして実行します。操作がない場合は、操作があると言われるまで待ちます。
疑似コード (ここではクリティカル セクションを無視します):
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 クラスがこれOperationHandler
を初期化してstart()
s します。いくつかの要求が到着するたびに、コントローラーはoperationRequired
スレッドで呼び出しを行い、操作が無限while
ループで非同期に処理されるようにします。これを達成する方法はありますか?
this.wait()
andを試してみましthis.notify()
たが、デッドロックが発生するかIllegalMonitorStateException
、さまざまな同期ブロックに依存します。