1. ホーム
  2. java

[解決済み] runメソッドを直接呼び出すとどうなるのでしょうか?

2022-02-15 07:21:48

質問

クラス "TestRunnable"があり、runメソッドをオーバーライドするために、以下の実装をしています。 Runnable . オーバーライドされたrunメソッドを実行すると、以下のようになります。

TestRunnable nr = new TestRunnable();
Thread t = new Thread(nr);
t.setName("Fred");
t.start();

  • を直接呼び出したらどうなるのでしょうか? t.run();
  • を呼び出さない場合はどうなるのでしょうか? t.start(); ?

解決方法は?

その run メソッドは単なるメソッドです。 これを直接呼び出すと、別のスレッドではなく、現在のスレッドで実行されます。

以下は私のテストです。 TestRunnable :

class TestRunnable implements Runnable
{
   public void run()
   {
      System.out.println("TestRunnable in " + Thread.currentThread().getName());
   }
}

のみであれば出力します。 start が呼び出されます。

TestRunnable in Fred

のみであれば出力します。 run が呼び出されます。

TestRunnable in main

もし start が呼ばれないと Thread は決して実行されません。 メインスレッドは終了し Thread はガベージコレクションされます。

どちらも呼び出されなかった場合の出力。 (何も)