这段代码中,两个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 许可协议
引用
Thread.join()
方法 javadocs :有一个线程正在运行您的示例代码,它可能是 主线程。
t1
和t2
线程。这两个线程开始并行运行。t1.join()
等待t1
线程完成。t1
线程完成,t1.join()
方法在主线程中返回。请注意,t1
可能已经在join()
调用之前完成,在这种情况下join()
调用将立即返回。t2.join()
等待t2
线程完成。t2
线程完成(或者它可能在t1
线程完成之前完成)并且t2.join()
方法在主线程中返回。重要的是要了解
t1
和t2
线程一直 在并行 运行,但启动它们的主线程需要等待它们完成才能继续。这是一个常见的模式。此外,t1
和/或t2
可能在主线程调用join()
之前 完成。如果是这样,那么join()
不会等待,而是会立即返回。否。调用
t1.join()
的 主 线程将停止运行并等待t1
线程完成。t2
线程并行运行,完全不受t1
或t1.join()
调用的影响。就try/catch而言,
join()
抛出InterruptedException
意味着正在调用的主线程join()
可能被另一个线程本身中断。在
while
循环中加入是一种奇怪的模式。通常,您会执行第一个连接,然后第二个连接处理InterruptedException
在每种情况下都适当地处理。无需将它们放在一个循环中。