这个线程加入代码是什么意思?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (34)

在这个代码中,这两个连接和中断是什么意思?t1.join()导致t2停止,直到t1终止?

Thread t1 = new Thread(new EventThread("e1"));
t1.start();
Thread t2 = new Thread(new EventThread("e2"));
t2.start();
while (true) {
   try {
      t1.join();
      t2.join();
      break;
   } catch (InterruptedException e) {
      e.printStackTrace();
   }
}
提问于
用户回答回答于

这是一个最喜欢的Java面试问题。

Thread t1 = new Thread(new EventThread("e1"));
t1.start();
Thread e2 = new Thread(new EventThread("e2"));
t2.start();

while (true) {
    try {
        t1.join(); // 1
        t2.join(); // 2  These lines (1,2) are in in public static void main
        break;
    }
}

t1.join()意思是,t1说“ 我想先完成 ”。同样如此t2。无论谁开始t1t2线程(在这种情况下,该main方法),主要等待t1t2完成他们的任务。

然而,重要的一点要注意了,t1并且t2自己可以并行而不考虑加入调用序列的运行t1t2。这是main/daemon必须等待的线程。

用户回答回答于

有一个线程正在运行你的示例代码,这可能是主线程

  1. 主线程创建并启动t1t2线程。两个线程开始并行运行。
  2. 主线程调用t1.join()等待t1线程完成。
  3. t1线程完成和t1.join()方法在主线程返回。请注意,t1join()呼叫进行之前可能已经完成,在这种情况下,join()呼叫将立即返回。
  4. 主线程调用t2.join()等待t2线程完成。
  5. t2线程完成(或者它可能已经完成了前t1线程那样)和t2.join()方法在主线程返回。

理解t1t2线程并行运行是非常重要的,但启动它们的主线程需要等待它们完成才能继续。这是一种常见的模式。此外,t1和/或t2可能在主线程调用它们之前完成join()。如果是这样,则join()不会等待,但会立即返回。

t1.join() 意味着导致t2停止,直到t1终止?

不。正在调用的线程t1.join()将停止运行并等待t1线程完成。该t2线程正在并行运行,并且完全不受t1t1.join()通话的影响。

就try / catch而言,join()throws InterruptedException意味着正在调用的主线程join()本身可能被另一个线程中断。

扫码关注云+社区