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

标签 java multithreading

在这段代码中,两个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();
   }
}

最佳答案

What does this thread join code mean?

引用 Thread.join() method javadocs :

join() Waits for this thread to die.

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

  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() means cause t2 to stop until t1 terminates?

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

在 try/catch 方面,join() 抛出 InterruptedException 意味着调用 join() 的主线程可能本身被另一个线程中断。

while (true) {

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

关于java - 这个线程连接代码是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15956231/

相关文章:

Java服务器页面: How to get a value into an attribute from code without Expression Language?

java - 当 servlet 请求到来时加载早期创建的对象

java - 如何使用 Mockito 模拟 forEach 行为

java多态代码。新手级别

Java ScheduledFuture 获取列表

C++ 标准条件变量涵盖了很多共享变量

java - GraphStream 线程同步

c++ - 我如何拆除多线程 C++ 中的观察者关系?

java - 更新的 GUI 应用程序

java - 解释泛型如何在此方法中工作