11
Javaエグゼキューター:タスクが完了したときに、ブロックせずに通知する方法
エクゼキューターサービスに送信する必要があるタスクでいっぱいのキューがあるとします。一度に1つずつ処理してほしい。私が考えることができる最も簡単な方法は: キューからタスクを取得する 実行者に提出する 返されたFutureで.getを呼び出し、結果が利用可能になるまでブロックします キューから別のタスクを実行... ただし、完全にブロックしないようにしています。タスクを一度に1つずつ処理する必要のある10,000のキューがある場合、それらのほとんどがブロックされたスレッドを保持しているため、スタック領域が不足します。 私が望むのは、タスクを送信し、タスクが完了したときに呼び出されるコールバックを提供することです。そのコールバック通知をフラグとして使用して、次のタスクを送信します。(functionaljavaとjetlangはこのような非ブロッキングアルゴリズムを使用しているようですが、コードを理解できません) JDKのjava.util.concurrentを使用してそれを行うにはどうすればよいですか。 (これらのタスクを提供するキュー自体がブロックする可能性がありますが、それは後で取り組む問題です)