2012-04-17 8 views
7

キューにタスクを入れない固定サイズのスレッドプールを作成します。つまり、スレッドプールが現在使用されている場合は、着信タスクを完全に拒否する必要があります。 documentationに基づいて、これを行う1つの方法は、私の意見では、タスクを許可することを拒否するダミーQueueオブジェクトを作成することです。 Javaでこれを達成するための慣習的な方法は何ですか?QueueのないThreadPoolExecutor

答えて

10

ThreadPoolExectorには、オブジェクトを保持しないキューであるSynchronousQueueを使用できます。キャッシュされたスレッドプールは、必要に応じて新しいスレッドを作成するため、これを使用します。

キューに登録できない場合は、RejectedExecutionHandlerを使用して現在のスレッドでタスクを実行することをお勧めします。このようにして、常に「直ちに」実行されます。

ところで、なぜこれをやりたいのかを明確にすると便利です。

0

なぜこのようなことをしたいのかを詳しく説明できますか? TP + Qの基本的な目的は、作業のための自動的な「保持メカニズム」を持ち、作業者を作業作成プロセスから切り離すことです。あなたの意図が労働者と同じくらい多くの受け入れ可能な仕事パッケージを持っているだけなら、本当にTPEは必要ありません。

+0

タスクは、スレッドのキューで待機するのではなく、空きスレッドを持つ別のスレッドプールエグゼキュータを取得できます。 ThreadPoolExecutorの代わりに何を使うべきですか? –

+0

実行を制御したい場合、TPEはあなたの選択ではありません。仕事を手放すことができるワーカースレッドのシンプルなコレクションを持っているほうがいいです(シンプルなセット)。あなたは、スレッドを構築して、スレッドをメインスレッドから出し入れします。 – vivekv