Javaでマルチスレッドを実装する方法は2つありますが、その違いは何ですか?

Javaでマルチスレッドを実装する方法は2つあります:Threadクラスを継承する方法とRunnableインタフェースを実装する方法です。

  1. 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();
    }
}
  1. 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();
    }
}

違い:

  1. Threadクラスを継承する方法を使用する場合、直接Threadクラスを操作する必要がありますが、Runnableインタフェースを実装する方法を使用すると、タスクとスレッドの操作を分離することができ、コードがより明確でメンテナンスしやすくなります。
  2. Threadクラスを継承する方法は1つのクラスだけを継承できますが、Runnableインターフェースを実装する方法は複数のインタフェースを実装できます。そのため、Runnableインタフェースを実装するクラスは他のクラスを継承することができ、単一継承の制限を回避します。
  3. Threadクラスを継承してスレッドオブジェクトを作成すると、スレッドクラス自体が作成されたオブジェクトとなりますが、Runnableインターフェースを実装してスレッドオブジェクトを作成すると、スレッドクラスはRunnableインターフェースを実装したオブジェクトをThreadクラスのコンストラクタに渡すことで作成されます。
bannerAds