使用link查看我的代码。我对连接概念的理解是,如果我创建了一个线程" t2"在主线程中。我写的就像t2.join()。首先执行t对象的run方法下的所有东西都将被执行,而主线程的执行将被启动回来。但是如果我又创建了一个线程" t1"在" t2"之前的主线程中。那时" t2"的执行应该首先完成,而不是" t1"' s。正确?但是如果你看到我的链接代码。 t1和t2同时运行。为什么会这样?
答案 0 :(得分:0)
根据您分享的链接
e1.start();
e2.start();
try {
e2.join();
} catch (InterruptedException e) {
e.printStackTrace();
这里我们有3个线程在运行
主线程
e1
E2。
现在当你写e2.join()
时,我们试着回答哪个线程会执行这个语句?它的 main Thread
(这句话不是从任何线程的run()
方法调用,它直接在主线程的执行下),因此main Thread
等待线程e2
的完成。线程e1
已经启动,因此它可以在不受影响的情况下运行。
答案 1 :(得分:0)
这里在你的程序主线程告诉线程调度程序通过调用e1.start()现在主线程e1进程来启动e1,类似地,当调用e2.start()时,调度程序在绝望的执行路径中启动它,如e1&主线继续。但是当主线程执行e2.join()时,JVM会导致主线程等待,直到线程e2完成其任务。 &安培;主线程不会执行剩余代码,也不会要求线程调度程序启动e3,e4& E5。 谢谢快乐学习。