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

时间:2013-12-10 18:31:50

标签: java multithreading

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

TestRunnable nr = new TestRunnable();
Thread t = new Thread(nr);
t.setName("Fred");
t.start();
  • 如果我直接致电t.run();
  • 怎么办?
  • 如果我们不致电t.start();会怎样?

2 个答案:

答案 0 :(得分:11)

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将被垃圾收集。

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

答案 1 :(得分:0)

如果调用start方法,则会分配一个单独的线程来执行run方法,这意味着您可以实现多线程。但是当你直接调用run方法然后它变成一个普通的方法,main方法本身将执行run方法,意味着没有多线程。