调用Thread.start()时会发生什么

时间:2014-05-15 07:52:30

标签: java multithreading

....正如问题的标题所说,我想知道当我们调用Thread.start()以及何时start方法返回和main resume执行时内部发生了什么。内部所有内容都被触发,比如使用调度程序等注册线程。?还有为什么使用执行程序?

1 个答案:

答案 0 :(得分:2)

当您调用t.start时,JVM会创建一个新的执行线程(具有自己的堆栈)。这是由本机代码完成的,它不是用Java完成的。那么JVM本身在新创建的执行线程中调用t.run。这通常是混淆的源头(对于初学者),因为Java类Thread与概念thread of execution具有相同的名称。我想人们可以把这两个想象成:后者是'物理概念' ,前者是它的'抽象Java表示作为一个类#39 ; 即可。

在当前执行线程中调用t.start和在新创建的执行线程中调用t.run之间通常需要一些时间;因为创建一个新的执行线程是一个有点繁重的操作,所以有一段时间滞后。

Thread.start

  

使该线程开始执行; Java虚拟机调用此线程的run方法。

     

结果是两个线程同时运行:当前线程(从调用start方法返回)和另一个线程(执行其run方法)。

     

不止一次启动线程永远不合法。特别是,一旦完成执行,线程可能无法重新启动。