如果我们直接调用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。