私は問題を解決するためのJavaのかなり標準的なメカニズムを持っています:
- 作業項目は、特定の時間に実行するようにスケジュールする必要があります
- 次に、各作業項目は、条件が真になるのを待つ必要があります
- 作業項目はキャンセル可能である必要があります
私が使用する解決策は次のとおりです。
- 作業項目をスケジュールするためのシングルスレッドスケジューラを用意する
ExecutorService
(マルチスレッドの場合があります)- 次に、スケジュールされた各作業項目は、実際の作業をに送信し
ExecutorService
ます。返さFuture
れたものはマップにキャッシュされます。完了サービスは、作業が完了したときにキャッシュから未来を削除するために使用されます - アイテムは、キャッシュされた先物を介してキャンセルできます
もちろん、私のエグゼキュータは、少なくとも私が期待するブロッキング作業項目の数と同じくらいの数である必要がありますが、これは実際には問題ではありません。
だから今、私はScalaでコーディングし、アクターフレームワークを使用しています。私の作業項目をアクターに送信されるイベントにカプセル化できると仮定すると、次のようになります。
- 特定の時間に作業項目をスケジュールするためにどのメカニズムを使用しますか?
- 作業項目がアクターに送信されるイベントである場合、バッキングスレッドプールが同時にブロックできる項目の数よりも大きいことを確認するにはどうすればよいですか?
- 以前にスケジュールされた作業項目をキャンセルするにはどうすればよいですか?