【问题标题】:Java join() concept [duplicate]Java join() 概念
【发布时间】:2017-01-13 02:53:29
【问题描述】:

link 中查看我的代码。我对连接概念的理解是,如果我在主线程中创建了一个线程“t2”。我写得像 t2.join()。首先将执行 t 对象的 run 方法下的所有内容,然后重新开始执行主线程。但是如果我在“t2”之前在主线程中创建了一个多线程“t1”。那时“t2”的执行应该首先完成,然后是“t1”。正确的?但是,如果您在我的链接代码中看到。 t1 和 t2 同时运行。为什么会这样?

【问题讨论】:

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

标签: java multithreading


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    根据你分享的链接

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

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

    1. 主线程

    2. e1

    3. e2.

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

    【讨论】:

      猜你喜欢
      • 2020-10-11
      • 1970-01-01
      • 2012-09-05
      • 2016-08-30
      • 2013-11-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      相关资源
      最近更新 更多