1. ホーム

[解決済み】Thread start()とRunnable run()の違いとは?)

2022-04-03 12:42:50

質問

次の2つのRunnableがあるとします。

class R1 implements Runnable {
    public void run() { … }
    …
}

class R2 implements Runnable {
    public void run() { … }
    …
}

では、これと何が違うのか。

public static void main() {
    R1 r1 = new R1();
    R2 r2 = new R2();

    r1.run();
    r2.run();
}

そして、これ。

public static void main() {
    R1 r1 = new R1();
    R2 r2 = new R2();
    Thread t1 = new Thread(r1);
    Thread t2 = new Thread(r2);

    t1.start();
    t2.start();
}

解決方法は?

最初の例 マルチスレッドではありません。両方が1つの(既存の)スレッドで実行されます。スレッド生成なし。

R1 r1 = new R1();
R2 r2 = new R2();

r1r2 を実装したクラスの2つの異なるオブジェクトに過ぎません。 Runnable インターフェイスを実装しており、そのため run() メソッドを使用します。 を呼び出すと r1.run() は、現在のスレッドで実行されていることになります。

2つ目の例 2つの別々のスレッド

Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);

t1t2 はクラスのオブジェクトです。 Thread . を呼び出すと t1.start() を呼び出すと、新しいスレッドが開始され run() のメソッドを使用します。 r1 を内部で実行し、その新しいスレッドで実行します。