11

Javaでスレッドを使用するには2つの方法があることを知っています。

  1. Runable を実装する
  2. 延長スレッド

また、 Runableを実装する 方がThreadを拡張するよりも優れ ていることも知っています。

しかし、なぜ 1 つだけではなく、2 つの方法があるのでしょうか。

Runnableの実装がより良いアプローチである場合、別のオプションがあるのはなぜですか?

オプションが 1 つしかない場合、何が問題になるでしょうか。

4

10 に答える 10

7

技術的には、実装する方法は 1 つしかありませんRunnableThread、偶然にも、まさにそれを行うので、それを拡張すると、インターフェース要件を自明に満たします。

于 2013-06-26T05:01:25.790 に答える
2

Thread をタスクとして使用すると、並列スレッドを作成して実行するためのコンパクトな方法が提供されます

new Thread() {
    public void run() {
        ...
    }
}.start();
于 2013-06-26T05:11:08.757 に答える
2

どちらの方法もアプローチが異なります。Runnable インターフェースを実装しても、スレッド自体を制御することはできません。また、スレッド クラスを拡張すると、派生クラスは他の基本クラスを拡張できなくなります。

したがって、ユーザーがプログラムを完全に制御したい場合は、Thread クラスの拡張が適切なオプションであり、ユーザーが他の基本クラスを柔軟に拡張したい場合は、Runnable Interface の実装が適切なオプションです。

于 2013-06-26T05:11:21.833 に答える
2

Runnable インターフェイスを実装したとしても、スレッドを作成してタスクをスレッドとして実行できるようにする必要があります。Runnable を実装することで得られる明らかな利点は、

  1. 他のクラスを自由に拡張できます
  2. より多くのインターフェースを実装できます
  3. スレッドプールで Runnable 実装を使用できます

Thread クラスの拡張は、Runnable を内部的に実装するための単なるオプションであるため、Runnable インターフェイスを間接的に実装することになります。開発者がクラスを拡張するのを防ぐために、このクラスが final にされていないだけです。Joshua Bloch が「Effective Java」で述べているように、通常は Thread を拡張する理由はないはずです。

于 2013-06-26T05:28:37.940 に答える
2

Thread を拡張すると、各スレッドに固有のオブジェクトが関連付けられますが、Runnable を実装すると、多くのスレッドが同じ実行可能なインスタンスを共有できます。

于 2013-06-26T06:40:51.900 に答える