我有一个“TestRunnable”类,它通过实现Runnable
来覆盖run方法。
运行重写的run方法,如下所示:
TestRunnable nr = new TestRunnable();
Thread t = new Thread(nr);
t.setName("Fred");
t.start();
t.run();
t.start();
会怎样?答案 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方法,意味着没有多线程。