複数の Runnable オブジェクトをキューに入れ、1 つのスレッドで実行を待機することは可能ですか? ExecutorService を使用せずにどのように行うことができますか? これらの Runnable オブジェクトの 1 つがチェックされていない例外をスローした場合、スレッドの実行を停止しますか?
3 に答える
これは、複数のRunnableオブジェクトをキューに入れて、1つのスレッドでの実行を待機することは可能ですか?
ExecutorServiceを使用します。
ExecutorServiceを使用せずにそれを行うにはどうすればよいですか?
BlockingQUeueとThreadを使用します。
それらのRunnableオブジェクトの1つがチェックされていない例外をスローした場合、スレッドの実行を停止しますか?
あなたはこれを自分で書かなければならないので、それはあなた次第です。
ExecutorServiceの場合、スローされたThrowableがFutureオブジェクトに追加され、確認できるようになります。これを行うのを忘れるのは非常に簡単です。その場合、Runnableにtry/catchブロックを追加する必要があります。
ExecutorServiceを使用しない特別な理由はありますか?これは、1つのスレッドで機能する実装を提供します。Executors.newSingleThreadExecutor()
可能です。キューをリッスンするスレッドを開きます。アイテムを検出するたびに、デキューして実行します。タスクの実行をtrycatchブロックでラップできるため、タスクの1つが例外をスローした場合でも、ワーカースレッドは作業を続行できます。
そうは言っても、上記はまさにThreadPoolExecuterが行うことですが、なぜそれを使用したくないのでしょうか。(宿題?)