- ベストアンサー
マルチスレッドの実装について
只今、数冊の本を読み、現在マルチスレッドの部分を やっているのですが、 参考本AとBには class Sample extends Thread { というやり方が書いてあり、 参考本Cには class Sample implements Runnable { というやり方だけ書いてあります。 どういう事だと思い、クラスリファレンス本を読んでみると、 『マルチスレッドプログラミングを行う際にはthreadを継承するか、Runnableインターフェイスを実装します』 とだけ記述されていました。 参考本AとBは2002年に発行・改訂されており、「extends Thread」の説明しか載っていませんでした。 参考本Cは2000年発行で改訂はされていません。 Q:この2つは使い分けのようなものがあるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1さん答えの通り、Threadはクラスなので、 他のクラスを継承している場合使えません。 Runnableを使った場合、Threadにあるsleep()などの メソッドを呼び出すのが多少面倒になります。 (Thread.currentThread()を使ってThreadを得る) エレガントなのはRunnableの方。 便利なのはThreadの方と言えるでしょうか。 公式見解ではRunnableの方と言われています。
その他の回答 (2)
- yoneda_16
- ベストアンサー率47% (166/350)
参考書というか、動くものをとりあえず作るだけならどちらでもいいのではないでしょうか。それを超えて、ある程度の大きさのプログラムを作る際にどのように考えるべきかについてはいくつか議論がなされています。私はきちんと理解できていない(恥)ので、とりあえず下記URLに記録されている議論を読むことをお勧めします。 (他にも市販書籍でちょっと見た覚えもありますが…) http://java-house.jp/~takagi/archive/fj.comp.lang.java-interface-Sep1998/000001.html#body http://java-house.jp/ml/archive/j-h-b/017966.html#body
お礼
参考URL有難うございました。 レスが多いのと、理解不足な部分があるので 時間は掛かりますが全て目を通しておこうと思います。
- ngsvx
- ベストアンサー率49% (157/315)
コードを書くのが手間でなければ、全部Runnableの実装でもいいでしょう。 既存のクラスを別スレッドで走らせる場合はRunnableの実装しか選択肢がありません。
お礼
納得しました。 有難うございます。
お礼
確かにRunnableの方はちょっと面倒だな。とは 思ってましたが、継承が関わっているという事までは 分かりませんでした。 有難うございました。