1、在某些情况下,我们需要等待线程的终结。例如,我们可能会遇到程序在执行前需要初始化资源。在执行剩下的代码之前,我们需要等待线程完成初始化任务。为了达到此目的,我们使用Thread类的join()方法。当前线程调用某个线程的这个方法时,它会暂停当前线程,直到被调用线程执行完成。

2、Java提供2种形式的join()方法:

Join(longmilliseconds)

Join(long milliseconds,long nanos)

第一种join方法,让调用线程等待特定的毫秒数。例如,如果thread1对象使用代码thread2.join(1000),那么线程thread1暂停运行,直到 以下其中一个条件发生:

Thread2结束运行

1000毫秒过去了

当其中一个条件为真时,join()方法返回。

第二个版本的join方法和第一个很像,只不过它接收一个毫秒数和一个纳秒数作为参数。

举例如下:

package mytest;
class Thread1 extends Thread
{  public Thread1(String threadName)  {     super(threadName);  }  public void run()  {  System.out.println(getName() + "is running");  try  {  sleep(2000);  }   catch (InterruptedException e)  {  e.printStackTrace();  }  System.out.println("thread1 is over");    }
}  

package mytest;
class Thread2 extends Thread
{  private Thread1 thread1;  public Thread2(String threadName, Thread1 thread1)  {  super(threadName);  this.thread1 = thread1;       }  public void run()  {  System.out.println(getName() +  "is running");  try  {  thread1.start();  thread1.join();  }   catch (InterruptedException e)  {  e.printStackTrace();  }  System.out.println("thread2 is over");    }
}

package mytest;
public class JoinTest
{    public static void main(String[] args)    {    Thread1 thread1 = new Thread1("Thread1");    Thread2 thread2 = new Thread2("Thread2", thread1);    thread2.start();    }
}

转载于:https://www.cnblogs.com/pypua/articles/7243281.html

Java并发学习之六——等待线程的终结相关推荐

  1. java并发学习之六:JCSP(Java Communicating Sequential Processes)实践

    首先得描述下什么是JCSP:CSP是Communicating Sequential Processes的缩写 在ibm的developerworks 中国上学习java的并发编程时无意发现的,因为在 ...

  2. Java并发学习之玩转线程池

    2019独角兽企业重金招聘Python工程师标准>>> 线程池的使用姿势 基本上实际的项目不可能离开线程池,只是看你有没有注意到罢了 作为以业务需求为驱动,最顺溜的是写if-else ...

  3. Java并发学习三:银行转账的死锁问题解决及示例

    Java并发学习系列文章:Java并发学习-博客专栏 今天在学习极客时间专栏:<Java并发编程实战> 从03 | 互斥锁(上):解决原子性问题到06 | 用"等待-通知&quo ...

  4. Java并发学习一:CPU缓存导致的可见性问题带来的并发Bug

    Java并发学习系列文章:Java并发学习-博客专栏 今天在学习极客时间专栏:<Java并发编程实战> 第一讲01 | 可见性.原子性和有序性问题:并发编程Bug的源头中提到了: 多核时代 ...

  5. java并发编程实践(2)线程安全性

    [0]README 0.0)本文部分文字描述转自:"java并发编程实战", 旨在学习"java并发编程实践(2)线程安全性" 的相关知识: 0.1)几个术语( ...

  6. 【Java进阶】Java并发类库提供的线程池有哪几种? 分别有什么特点?

    我在专栏第 17 讲中介绍过线程是不能够重复启动的,创建或销毁线程存在一定的开销,所以利用线程池技术来提高系统资源利用效率,并简化线程管理,已经是非常成熟的选择. 今天我要问你的问题是,Java 并发 ...

  7. Java并发学习二:编译优化带来的有序性问题导致的并发Bug

    Java并发学习系列文章:Java并发学习-博客专栏 今天在学习极客时间专栏:<Java并发编程实战> 第一讲01 | 可见性.原子性和有序性问题:并发编程Bug的源头中提到: 编译器及解 ...

  8. Java并发(五)线程池使用番外-分析RejectedExecutionException异常

    Java并发(五)线程池使用番外-分析RejectedExecutionException异常 参考文章: (1)Java并发(五)线程池使用番外-分析RejectedExecutionExcepti ...

  9. Java 并发 多线程:创建线程的四种方式

    Java 并发 多线程: 创建线程的四种方式 继承 Thread 类并重写 run 方法 实现 Runnable 接口 实现 Callable 接口 使用线程池的方式创建 1. 通过继承 Thread ...

最新文章

  1. flash h5录音_博乐h5网站建设案例-AI优网络
  2. asp.net 用户控件
  3. java中substring的用法
  4. CentOS中使用Docker来部署Tomcat
  5. 动态给div追加html代码,javascript – 动态添加/删除div到html
  6. 阿里云实时计算,前世功,今生能!
  7. CF#420 B. Okabe and Banana Trees 思维|暴力|几何
  8. git Gui从服务器拉去项目
  9. bookStore项目总结
  10. 数字证书产品的主题通常含有如下字段
  11. Unity3D Asset文件导出3DMax 可编辑格式
  12. 旋转木马--利用html5和css3制作好看的图片3D旋转效果
  13. 《零基础入门学习Python》第019讲:函数:我的地盘听我的
  14. 【用户画像和用户标签】
  15. N沟道增强型MOS管原理
  16. 开关电源芯片(自学使用 码住)
  17. AR增强现实 Augmented Reality
  18. Apache DolphinScheduler 开源之夏学生项目申请开启,6 大课题等你来拿万元奖金!
  19. Python输入长宽,求长方形的周长和面积
  20. 提取excel中的图片

热门文章

  1. 一个网卡下设置两个ip地址
  2. 最长公共前缀—leetcode14
  3. Swift 和 Objective-C 混编
  4. C语言:函数中参数的传值与传地址
  5. Pixhawk---通过串口方式添加一个自定义传感器(超声波为例)
  6. 数据结构和算法学习的开端
  7. 概率论-2.6 随机变量函数的分布
  8. [C/C++面试题]-错题笔记与解析
  9. [转]如何切换多个GitHub账号
  10. [BUUCTF-pwn]——ciscn_2019_n_8