newSingleThreadExecutor()
[ファクトリ メソッド] を使用する方が他の方法よりも便利な実際の例を教えてください。
固定またはキャッシュされたスレッド プールではなく、シングル スレッドのスレッド プールをいつ使用するかについて質問されていると思います。
実行するタスクが多数ある場合にシングル スレッド エグゼキュータを使用しますが、実行するスレッドは 1 つだけにします。もちろん、これは 1 の固定スレッド プールを使用するのと同じです。多くの場合、これは並行して実行する必要がなく、バックグラウンド タスクであり、システム リソース (CPU、メモリ、IO) をあまり消費したくないためです。オブジェクトとしてさまざまなタスクを処理したいので、Callable
最適ですが、必要なのはそれらを実行するための単一のスレッドだけです。Runnable
ExecutorService
たとえば、私は春に注入する多くのタイマー タスクを持っています。2 種類のタスクがあり、「短期」タスクは単一のスレッド プールで実行されます。私のシステムには数百のスレッドがありますが、それらすべてを実行するスレッドは 1 つしかありません。ディスク容量のチェック、ログのクリーンアップ、統計のダンプなどの日常的なタスクを実行します。時間が重要なタスクについては、キャッシュされたスレッド プールで実行します。
もう 1 つの例は、一連のパートナー統合タスクがある場合です。それらは非常に時間がかからず、実行頻度もかなり低く、他のシステム スレッドと競合させたくないため、単一のスレッド化されたエグゼキュータで実行されます。
3 番目の例は、各状態ミューテーターがジョブをある状態から別の状態に移動Runnable
し、単一のスレッド プールに として登録される有限状態マシンを使用することです。何百ものミューテーターがありますが、ある時点で有効なタスクは 1 つだけなので、タスクに複数のスレッドを割り当てる意味はありません。