Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java join()概念_Java_Multithreading - Fatal编程技术网

Java join()概念

Java join()概念,java,multithreading,Java,Multithreading,在中查看我的代码。我对连接概念的理解是,如果我在主线程中创建了一个线程“t2”。我写的像t2.join()。首先,t对象的run方法下的所有内容都将被执行,然后主线程的执行将被重新启动。但如果我在主线程“t2”之前再创建一个线程“t1”。此时,应首先执行“t2”,然后执行“t1”。对的但如果你看到我的链接代码。t1和t2同时运行。为什么会这样 根据您共享的链接 e1.start(); e2.start(); try { e2.join(); } c

在中查看我的代码。我对连接概念的理解是,如果我在主线程中创建了一个线程“t2”。我写的像t2.join()。首先,t对象的run方法下的所有内容都将被执行,然后主线程的执行将被重新启动。但如果我在主线程“t2”之前再创建一个线程“t1”。此时,应首先执行“t2”,然后执行“t1”。对的但如果你看到我的链接代码。t1和t2同时运行。为什么会这样

根据您共享的链接

    e1.start();
    e2.start();
    try {
        e2.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
这里我们有3个线程正在运行

  • 主线

  • e1

  • e2


  • 现在,当您编写
    e2.join()
    时,让我们尝试回答哪个线程将执行此语句?它是
    主线程
    (此语句不是从任何线程的
    run()
    方法调用的,它直接在主线程的执行下),因此,它是
    主线程
    等待线程
    e2
    完成。线程
    e1
    已启动,因此运行时不会受到影响

    在您的程序中,主线程告诉线程调度程序通过调用e1.start()来启动e1。现在,主线程e1正在进行中,类似地,当调用e2.start()时,调度程序在执行的绝望路径中启动e1,就像e1和主线程继续一样。但是当主线程执行e2.join()时,JVM会导致主线程等待,直到线程e2完成其任务主线程不会执行剩余的代码,它不会要求线程调度程序启动e3、e4和e5。
    感谢快乐学习。

    不要链接代码。在问题中包括相关部分。尚未查看代码,但如果启动两个线程(然后并行运行,这就是线程的要点),然后使用
    join()
    等待线程2完成,那么当线程2结束时,无论线程1在做什么,主线程都将继续。线程1可以在线程2之前或之后结束,没关系。@ketan我已经发布了我的答案,希望对您有所帮助