当我们调用线程的#start()
方法时,它会调用#run()
方法。但是在调用#start()
之后,控件返回到#main()
方法(或者创建线程的位置)。
为什么会这样?为什么控件没有跳转到#run()
方法?
答案 0 :(得分:2)
这是多线程的重点。
新线程开始执行其代码(来自run
方法),主线程也继续执行其代码,以便代码并行执行。
答案 1 :(得分:1)
首先,要知道进程只是一个执行中的程序。
每个进程至少有一个线程,一个执行单元,它是主线程。线程彼此并行运行。
当你关闭一个新线程时,你从中解除它的当前线程仍在运行(当然,直到它结束)。现在,您有2个并行运行的线程。
在像Eclipse这样的IDE中进行调试时,通常会跟踪一个特定的线程,主线程。因此,调试中的逐步执行过程不会遵循新线程的执行路径。在创建新线程后,它将继续使用任何代码。
答案 2 :(得分:0)
您不确定它是否会返回调用start()的方法,或者它是否会立即进入新线程。 Java线程执行很难预测。它可能会进入新线程一段时间,然后停止并返回主线程,然后完成新线程,然后返回主线程,等等。重点是,有两个现在并行的指令集到被执行,但由于JVM并不真正并行执行它们,而是一次一个,JVM将按照它确定的顺序执行它们。