質問: スレッドの勉強をしています。 スレッドの作成・実行には 1.Threadクラスのサブクラスを定義し、start()メソッドの使用 2.Runnableインタフェースを実装し、start()メソッドの使用 3.ExecutorServiceの使用(Executorインタフェースのexecute()メソッドの使用) の3通りがあるかと思います(ほかにもあるのかな?)。 これら3通りの違いについてわからないことがあります。 「1・2」については、排他制御(Synchronized)、同期制御(wait(),notify(),notifyAll())のサンプルコードが参考書(JavaSE Gold)には掲載されています。 「3」については、掲載されていませんが、排他制御・同期制御を行う機会はないと理解してよろしいのですか? また、「1・2」と「3」の違いは、 ・明示的にスレッドを作成する代わりに使用。 (new Thread(new(RunnableTask())).start()を呼び出す代わりに、execute()メソッドの使用 のみかとおもいますが、他に何かあるのですか? 抽象的な質問で申し訳ございませんがご教授よろしくお願いいたします。
回答: Thread、Runnableに関しては戻り値がVoidという問題がありました。 ExecutorServiceは上記の問題の解決策として、戻り値を指定できるようになりました。 Threadを単純な並列実行で利用するのであればExecutorServiceは必要ありませんが、並列実行、同期、それぞれのThreadの処理結果を複合して結果を出す必要があるのであればExecutorServiceはとても有用です。