Javaでマルチスレッドを実装する方法は2つありますが、その違いは何ですか?
Javaでマルチスレッドを実装する方法は2つあります:Threadクラスを継承する方法とRunnableインタフェースを実装する方法です。
- Threadクラスを継承する:Threadクラスを継承したサブクラスを作成し、run()メソッドをオーバーライドしてスレッドのタスクを定義します。このサブクラスのオブジェクトを作成し、start()メソッドを呼び出してスレッドを開始します。これは単純で直感的な方法ですが、Javaは多重継承をサポートしていないため、Threadクラスを継承すると他のクラスを継承することができません。
以下はサンプルコードです。
public class MyThread extends Thread {
@Override
public void run() {
// 线程的任务
}
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
}
- Runnableインターフェースを実装する:Runnableインターフェースを実装したクラスを作成し、run()メソッドをオーバーライドしてスレッドのタスクを定義します。このクラスのインスタンスを作成し、そのインスタンスをThreadクラスのコンストラクタにパラメータとして渡し、最後にstart()メソッドを呼び出してスレッドを起動します。この方法により、Javaの単一継承の制限を回避でき、またインターフェースを実装したクラスは他のクラスに継承されたり、パラメータとして渡されたりすることができます。
以下はサンプルコードです。
public class MyRunnable implements Runnable {
@Override
public void run() {
// 线程的任务
}
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
}
違い:
- Threadクラスを継承する方法を使用する場合、直接Threadクラスを操作する必要がありますが、Runnableインタフェースを実装する方法を使用すると、タスクとスレッドの操作を分離することができ、コードがより明確でメンテナンスしやすくなります。
- Threadクラスを継承する方法は1つのクラスだけを継承できますが、Runnableインターフェースを実装する方法は複数のインタフェースを実装できます。そのため、Runnableインタフェースを実装するクラスは他のクラスを継承することができ、単一継承の制限を回避します。
- Threadクラスを継承してスレッドオブジェクトを作成すると、スレッドクラス自体が作成されたオブジェクトとなりますが、Runnableインターフェースを実装してスレッドオブジェクトを作成すると、スレッドクラスはRunnableインターフェースを実装したオブジェクトをThreadクラスのコンストラクタに渡すことで作成されます。