Java join()概念

时间:2016-09-05 17:56:57

标签: java multithreading

使用link查看我的代码。我对连接概念的理解是,如果我创建了一个线程" t2"在主线程中。我写的就像t2.join()。首先执行t对象的run方法下的所有东西都将被执行,而主线程的执行将被启动回来。但是如果我又创建了一个线程" t1"在" t2"之前的主线程中。那时" t2"的执行应该首先完成,而不是" t1"' s。正确?但是如果你看到我的链接代码。 t1和t2同时运行。为什么会这样?

2 个答案:

答案 0 :(得分:0)

根据您分享的链接

    e1.start();
    e2.start();
    try {
        e2.join();
    } catch (InterruptedException e) {
        e.printStackTrace();

这里我们有3个线程在运行

  1. 主线程

  2. e1

  3. E2。

  4. 现在当你写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。 谢谢快乐学习。