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

Java 调用Thread.start()时会发生什么,java,multithreading,Java,Multithreading,…正如问题的标题所说,我想知道当我们调用Thread.start()时,内部发生的所有事情,以及start方法何时返回并执行main resume。所有内部触发的事情,比如向调度程序注册线程等等。。?还有为什么使用遗嘱执行人 当您调用t.start时,JVM将创建一个新的执行线程(具有自己的堆栈)。这是由本机代码完成的,而不是用Java完成的。因此,JVM本身在新创建的执行线程中调用t.run。这通常会引起混淆(对于初学者来说),因为Java类Thread与执行线程的概念同名。我想人们可以把这两

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

当您调用
t.start
时,JVM将创建一个新的执行线程(具有自己的堆栈)。这是由本机代码完成的,而不是用Java完成的。因此,JVM本身在新创建的执行线程中调用
t.run
。这通常会引起混淆(对于初学者来说),因为Java类
Thread
与执行线程的概念
同名。我想人们可以把这两个看作:后者是的“物理概念”,前者是它的“抽象Java表示为类”

在当前执行线程中调用
t.start
和在新创建的执行线程中调用
t.run
之间通常需要一段时间;由于创建新的执行线程是一项有点繁重的操作,因此存在一些时间延迟

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

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

多次启动线程是不合法的。特别是,线程一旦完成执行,就不能重新启动


只有一件事:执行器使用线程,而不是相反。Executors只是一个设计良好的Java类。(我的意思是,它完全是用Java编写的。看一看)。