Java并发学习之六——等待线程的终结
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并发学习之六——等待线程的终结相关推荐
- java并发学习之六:JCSP(Java Communicating Sequential Processes)实践
首先得描述下什么是JCSP:CSP是Communicating Sequential Processes的缩写 在ibm的developerworks 中国上学习java的并发编程时无意发现的,因为在 ...
- Java并发学习之玩转线程池
2019独角兽企业重金招聘Python工程师标准>>> 线程池的使用姿势 基本上实际的项目不可能离开线程池,只是看你有没有注意到罢了 作为以业务需求为驱动,最顺溜的是写if-else ...
- Java并发学习三:银行转账的死锁问题解决及示例
Java并发学习系列文章:Java并发学习-博客专栏 今天在学习极客时间专栏:<Java并发编程实战> 从03 | 互斥锁(上):解决原子性问题到06 | 用"等待-通知&quo ...
- Java并发学习一:CPU缓存导致的可见性问题带来的并发Bug
Java并发学习系列文章:Java并发学习-博客专栏 今天在学习极客时间专栏:<Java并发编程实战> 第一讲01 | 可见性.原子性和有序性问题:并发编程Bug的源头中提到了: 多核时代 ...
- java并发编程实践(2)线程安全性
[0]README 0.0)本文部分文字描述转自:"java并发编程实战", 旨在学习"java并发编程实践(2)线程安全性" 的相关知识: 0.1)几个术语( ...
- 【Java进阶】Java并发类库提供的线程池有哪几种? 分别有什么特点?
我在专栏第 17 讲中介绍过线程是不能够重复启动的,创建或销毁线程存在一定的开销,所以利用线程池技术来提高系统资源利用效率,并简化线程管理,已经是非常成熟的选择. 今天我要问你的问题是,Java 并发 ...
- Java并发学习二:编译优化带来的有序性问题导致的并发Bug
Java并发学习系列文章:Java并发学习-博客专栏 今天在学习极客时间专栏:<Java并发编程实战> 第一讲01 | 可见性.原子性和有序性问题:并发编程Bug的源头中提到: 编译器及解 ...
- Java并发(五)线程池使用番外-分析RejectedExecutionException异常
Java并发(五)线程池使用番外-分析RejectedExecutionException异常 参考文章: (1)Java并发(五)线程池使用番外-分析RejectedExecutionExcepti ...
- Java 并发 多线程:创建线程的四种方式
Java 并发 多线程: 创建线程的四种方式 继承 Thread 类并重写 run 方法 实现 Runnable 接口 实现 Callable 接口 使用线程池的方式创建 1. 通过继承 Thread ...
最新文章
- flash h5录音_博乐h5网站建设案例-AI优网络
- asp.net 用户控件
- java中substring的用法
- CentOS中使用Docker来部署Tomcat
- 动态给div追加html代码,javascript – 动态添加/删除div到html
- 阿里云实时计算,前世功,今生能!
- CF#420 B. Okabe and Banana Trees 思维|暴力|几何
- git Gui从服务器拉去项目
- bookStore项目总结
- 数字证书产品的主题通常含有如下字段
- Unity3D Asset文件导出3DMax 可编辑格式
- 旋转木马--利用html5和css3制作好看的图片3D旋转效果
- 《零基础入门学习Python》第019讲:函数:我的地盘听我的
- 【用户画像和用户标签】
- N沟道增强型MOS管原理
- 开关电源芯片(自学使用 码住)
- AR增强现实 Augmented Reality
- Apache DolphinScheduler 开源之夏学生项目申请开启,6 大课题等你来拿万元奖金!
- Python输入长宽,求长方形的周长和面积
- 提取excel中的图片