如果我们直接调用run方法会发生什么?

use*_*025 9 java multithreading

我有一个类"TestRunnable",它通过实现覆盖run方法Runnable.运行重写的run方法,如下所示:

TestRunnable nr = new TestRunnable();
Thread t = new Thread(nr);
t.setName("Fred");
t.start();
Run Code Online (Sandbox Code Playgroud)
  • 如果我直接打电话怎么办 t.run();
  • 如果我们不打电话t.start();怎么办?

rge*_*man 13

run方法只是另一种方法.如果直接调用它,那么它将不会在另一个线程中执行,而是在当前线程中执行.

这是我的测试TestRunnable:

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

start在调用时输出:

TestRunnable in Fred
Run Code Online (Sandbox Code Playgroud)

run在调用时输出:

TestRunnable in main
Run Code Online (Sandbox Code Playgroud)

如果start未调用,则Thread创建的将永远不会运行.主线程将完成Thread并将被垃圾收集.

如果两者都没有被调出则输出:(没有)