这个线程连接代码是什么意思?

新手上路,请多包涵

这段代码中,两个join和break是什么意思? 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();
   }
}

原文由 user697911 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 248
1 个回答

这个线程连接代码是什么意思?

引用 Thread.join() 方法 javadocs

join() 等待这个线程结束。

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

  1. 主线程创建并启动 t1t2 线程。这两个线程开始并行运行。
  2. 主线程调用 t1.join() 等待 t1 线程完成。
  3. t1 线程完成, t1.join() 方法在主线程中返回。请注意, t1 可能已经在 join() 调用之前完成,在这种情况下 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() 抛出 InterruptedException 意味着正在调用的主线程 join() 可能被另一个线程本身中断。

 while (true) {

while 循环中加入是一种奇怪的模式。通常,您会执行第一个连接,然后第二个连接处理 InterruptedException 在每种情况下都适当地处理。无需将它们放在一个循环中。

原文由 Gray 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题