....正如问题的标题所说,我想知道当我们调用Thread.start()以及何时start方法返回和main resume执行时内部发生了什么。内部所有内容都被触发,比如使用调度程序等注册线程。?还有为什么使用执行程序?
答案 0 :(得分:2)
当您调用t.start
时,JVM会创建一个新的执行线程(具有自己的堆栈)。这是由本机代码完成的,它不是用Java完成的。那么JVM本身在新创建的执行线程中调用t.run
。这通常是混淆的源头(对于初学者),因为Java类Thread
与概念thread of execution
具有相同的名称。我想人们可以把这两个想象成:后者是'物理概念' ,前者是它的'抽象Java表示作为一个类#39 ; 即可。
在当前执行线程中调用t.start
和在新创建的执行线程中调用t.run
之间通常需要一些时间;因为创建一个新的执行线程是一个有点繁重的操作,所以有一段时间滞后。
使该线程开始执行; Java虚拟机调用此线程的run方法。
结果是两个线程同时运行:当前线程(从调用start方法返回)和另一个线程(执行其run方法)。
不止一次启动线程永远不合法。特别是,一旦完成执行,线程可能无法重新启动。