Java/Ui培训
南京达内IT培训

400-111-8989

Java线程的join方法


南京达内培训讲师表示,Java线程的join方法可用于暂停当前线程的执行直至目标线程死亡。Thread中一共有三个join的重载方法。

public final void join():该方法将当前线程放入等待队列中,直至被它调用的线程死亡为止。如果该线程被中断,则会抛出InterruptedException异常。

public final synchronized void join(long millis):该方法用于让当前线程进入等待状态,直至被它调用的线程死亡或是经过millis毫秒。由于线程的执行依赖于操作系统,所以该方法无法保证当前线程等待的时间和指定时间一致。

public final synchronized void join(long millis, int nanos):该方法用于让线程暂停millis毫秒nanos纳秒。

下面的例子演示了join方法的使用。该段代码的目的是确保main线程最后结束,并且仅当第一个线程死亡才能启动第三个线程。

ThreadJoinExample.java
package com.journaldev.threads;
public class ThreadJoinExample {
  Thread t1 = new Thread(new MyRunnable(), t1);
  Thread t2 = new Thread(new MyRunnable(), t2);
  Thread t3 = new Thread(new MyRunnable(), t3);
  t1.start();
  //start second thread after waiting for 2 seconds or if it's dead
  try {
    t1.join(2000);
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  t2.start();
  //start third thread only when first thread is dead
  try {
    t1.join();
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  t3.start();
  //let all threads finish execution before finishing main thread
  try {
    t1.join();
    t2.join();
    t3.join();
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  System.out.println(All threads are dead, exiting main thread);
}
class MyRunnable implements Runnable {
  @Override
  public void run() {
    System.out.println(Thread started::: + Thread.currentThread.getName());
    try {
      Thread.sleep(4000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    System.out.println(Thread ended::: +Thread.currentThread.getName());
  }
}

上述程序的输出结果为:

Thread started:::t1

Thread started:::t2

Thread ended:::t1

Thread started:::t3

Thread ended:::t2

Thread ended:::t3

All threads are dead, exiting main thread

预约申请免费试听课

怕钱不够?就业挣钱后再付学费!    怕学不会?从入学起,达内定制课程!     担心就业?达内多家实践企业供你挑选 !

【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与联系我们,我们会予以更改或删除相关文章,以保证您的权益!"
上一篇:java中使用Map中常见问题解答
下一篇:Java内存模型常见问题解析

Java组件实现原理时,该可以从哪些角度回答?

大厂Java工程师真实面试题

Web前端工程师面试有什么技巧?

ui面试问题及答案(1)

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
江西省

贵州省

广西省

海南省