如果我们直接调用run方法会发生什么?
我有一个类“TestRunnable”,它通过实现Runnable
覆盖run方法。 运行重写的run方法,如下所示:
TestRunnable nr = new TestRunnable(); Thread t = new Thread(nr); t.setName("Fred"); t.start();
- 如果我直接调用
t.run();
怎么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
将被垃圾收集。
如果两者都没有被调出则输出:(没有)
如果调用start方法,则将分配一个单独的线程来执行run方法,这意味着您实现了multithreading。 但是当你直接调用run方法然后它变成一个普通的方法,main方法本身将执行run方法,意味着没有multithreading。