私はJavaでのスレッドプログラミングが初めてなので、この基本的な質問です。 (私はチェックしましたが、以前に尋ねられたこの質問を見つけることができませんでした)
Threadクラスを継承するか、またはRunnableインターフェースを実装することによって、スレッドを作成できることを読みました。 両方とも同じクラスに属するコードを見ました。
public class ThreadExample extends Thread implements Runnable {
}
どのような状況がこれを望んでいるのだろうか、そしてこれに何か利点があるのなら、それは何だろう。
回答:
回答№1の11拡張する Thread
そして 実装する Runnable
無駄です(Thread
既に実装している Runnable
)あなたはかなり 常に 実装したい Runnable
(そして ない 拡張する Thread
)それはあなたに使用の柔軟性を与えます Thread
直接(推奨されません)または新しいものを使用してください。 ThreadPool
の実装 java.util.concurrent
(推奨)
回答№2については4
いいえ、ThreadクラスはRunnableインターフェースを実装しているので、このアプローチを使用する利点はありません。それで、あなたのクラスがThreadクラスを拡張するならば。つまり、Runnableインタフェースも実装されています。
回答№3の4
この特定の状況では、他のポスターが説明しているように、それはあまり役に立ちません。 Thread
既に実装している Runnable
.
に 一部 場合によっては、「明らかなことを述べる」ことが有用です。ただし、クラスのユーザーへの「思い出させるもの」として。スーパークラスとインターフェイスの階層がかなり大きく、いくつかのレベルの継承がある場合(その一部はサードパーティ製ライブラリにあります)クラスを実装していても、そのクラスを特定のインタフェースを実装していると宣言するためのヘルパー 定義により そのスーパークラスがすでにそれを実装しているか、そのインターフェースのサブクラスの1つを実装しているからです。
特に便利です マーカーインタフェース (一部の人々は彼らが使われるべきではないと反対するかもしれませんそれは悪い習慣です - 実際には環境を完全に制御しないことがよくあります。つまり、実際には実装されていないインタフェースで、特別な機能に適したオブジェクトをマークするように設計されています。 Cloneable
)そのような場合、たとえ彼らの両親がすでに適格であっても、許可されたクラスのそれぞれに印を付けることはより明確になることができるのでもっと便利です。
回答№4の場合は-1
実行可能インターフェースとは、1つのジョブを多数のスレッドに割り当てることを意味します。 Threadクラスの間、各スレッドはそれに関連付けられた固有のオブジェクトを持ちます。
回答№5の場合は-1
他の基本クラスを拡張するためのより高い柔軟性が必要な場合は、実行可能インターフェースを実装するのが望ましいでしょう。