初期化に時間がかかるサービスの構成設定 (たとえば、JDBC 接続のパラメーター) を受け入れるユーザー インターフェイスを考えてみましょう。サービスの初期化が行われている間、ユーザー インターフェイスの応答性を維持したいと考えています。ユーザーが追加の変更を行った場合は、初期化をキャンセルし、新しいパラメーターを使用して再開する必要があります。
ユーザーが各文字を入力するとパラメーターが構成に組み込まれるため、多数の初期化要求が連続して作成される可能性があります。最後の 1 つだけを実行する必要があります。
この結果を達成するためにまとめたコードがありますが、この動作は ExecutorService として実装するのに非常に適しているようです。すべてを ExecutorService にリファクタリングする前に、似たような実装が既に世界に出回っていないか尋ねてみようと思いました。
もう少し詳しく言うと:
ExecutorService には 1 つのワーカー スレッドがあります。新しいタスクが送信されるとすぐに、現在のタスクはキャンセルされます (そしてワーカーは中断されます)。その後、次の実行のために新しいタスクがキャプチャされます。別のタスクが投入されると、現在のタスクは再びキャンセルされ、「次の実行」タスクはこの新しいタスクに設定されます。ワーカー スレッドが最終的に次の実行タスクを取得すると、それは常に最後に送信されたタスクになります。他のすべてのタスクはキャンセルまたは破棄されます。
喜んで共有したいような実装を持っている人はいますか? または、このタイプの動作をカバーする標準ライブラリはありますか? 実装するのは難しくありませんが、スレッド セーフを確立するのは難しい場合があるため、できれば実証済みのコードを使用したいと考えています。