并发编程实战 1.5. 等待线程终止-join()方法
2016-05-10 00:00
323 查看
摘要: 在一些情况下,我们需要等待线程的终止,再继续执行剩下的代码,为达到这个目的,可以使用Thread类中的join()方法。当一个线程对象的join()方法被调用时,调用它的线程被挂起,直到这个线程对象结束时。
在一些情况下,我们需要等待线程的终止,再继续执行剩下的代码,为达到这个目的,可以使用Thread类中的join()方法。当一个线程对象的join()方法被调用时,调用它的线程被挂起,直到这个线程对象结束时。
范例: 加载两个资源,当两个资源全部加载完之后,输出主线程结束
资源一:
资源二:
测试:
结果:
只有当ResourceOne与ResourceTwo都执行完了之后,才会继续执行main()方法。
还有另外两种形式:join(long milliseconds) 与 join(long milliseconds, long nanos),线程可以不必等到调用线程运行终止,如果到达参数指定的时钟,它将继续执行!
在一些情况下,我们需要等待线程的终止,再继续执行剩下的代码,为达到这个目的,可以使用Thread类中的join()方法。当一个线程对象的join()方法被调用时,调用它的线程被挂起,直到这个线程对象结束时。
范例: 加载两个资源,当两个资源全部加载完之后,输出主线程结束
资源一:
package com.rr.current2.c1_5_join.test; import java.util.Date; import java.util.concurrent.TimeUnit; /** * Created by Isaac on 16-5-10. */ public class ResourceOne implements Runnable { @Override public void run() { System.out.printf("资源1 正在加载中... (%s)\r\n", new Date()); try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } System.out.printf("资源1 加载完成!(%s)\r\n", new Date()); } }
资源二:
package com.rr.current2.c1_5_join.test; import java.util.Date; import java.util.concurrent.TimeUnit; /** * Created by Isaac on 16-5-10. */ public class ResourceTwo implements Runnable { @Override public void run() { System.out.printf("资源2 正在加载中...(%s)\r\n", new Date()); try { TimeUnit.SECONDS.sleep(4); } catch (InterruptedException e) { e.printStackTrace(); } System.out.printf("资源2 加载完成!(%s)\r\n", new Date()); } }
测试:
package com.rr.current2.c1_5_join.test; import java.util.concurrent.TimeUnit; /** * Created by Isaac on 16-5-10. * 范例: 加载两个资源,当两个资源全部加载完之后,输出主线程结束 */ public class Test { public static void main(String[] args) { Thread one = new Thread(new ResourceOne()); Thread two = new Thread(new ResourceTwo()); System.out.println("主程序开始!"); one.start(); two.start(); try { one.join(); two.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("主程序结束!"); } }
结果:
主程序开始! 资源1 正在加载中... (Tue May 10 22:37:01 CST 2016) 资源2 正在加载中...(Tue May 10 22:37:01 CST 2016) 资源1 加载完成!(Tue May 10 22:37:04 CST 2016) 资源2 加载完成!(Tue May 10 22:37:05 CST 2016) 主程序结束!
只有当ResourceOne与ResourceTwo都执行完了之后,才会继续执行main()方法。
还有另外两种形式:join(long milliseconds) 与 join(long milliseconds, long nanos),线程可以不必等到调用线程运行终止,如果到达参数指定的时钟,它将继续执行!
相关文章推荐
- springMVC可以进入到控制器中,却无法返回页面错误
- python 变量命名规范
- yii2缓存的介绍和使用
- php pdo操作数据库
- python设计模式(一)--简单工厂(上)
- python设计模式(一)--简单工厂(中)
- 【转】十条有用的 Go 技术
- sublime、phpstrom编辑器快捷键汇总
- XA式、非XA式Spring分布式事务的实现
- 注解实现spring AOP 示例
- spring注解事务
- springmvc 其他
- python占位符
- Python语言实现手机号归属地的方法
- python 编码
- Spring(五)AOP
- C#求亲密数
- & && java
- Combination Lock
- Leetcode-1. Two Sum