在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据中的值,就要用到join()方法了,方法join()的作用是等待线程对象被销毁。

代码示例:

package com.test;

public class TestJoin extends Thread {
@Override
public void run() {
try {
int secondValue = (int)(Math.random() * 10000);
System.out.println(secondValue);
Thread.sleep(secondValue);
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.test;

public class Run {

    public static void main(String[] args) {

        try {
TestJoin join = new TestJoin();
join.start();
join.join();
System.out.println("我想当线程对象执行完毕后我再执行"); } catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:

我相当线程对象执行完毕后我再执行

ps:如果把Run.java中的join.join()方法注释掉, 则会先打印 “我想当线程对象执行完毕后我再执行”

方法join与异常:

  在join过程中,如果当前线程对象被中断,则当前线程出现异常。

join(long)中的参数是设定等待时间。

方法join(long)与sleep(long)的区别:

  方法join(long)的功能个在内部是使用wait(long)方法来实现的,所以join(long)方法具有释放锁的特点。而Thread.sleep(long)方法却不释放锁.

最新文章

  1. Nodejs事件引擎libuv源码剖析之:高效线程池(threadpool)的实现
  2. 探索C#之虚拟桶分片
  3. webstrom配置sass与less
  4. JQuery冲突问题,以及含有jquery的框架与jquery冲突
  5. linux SecureCRT ssh key认证登陆
  6. php 读取文件readfile
  7. EasyUI的DataGrid 打印导出
  8. Windows多线程编程总结
  9. php 常用设计模式详解
  10. 使用EditText搜索listview里面的内容,实现Listview跟随变动的情况
  11. php 汉字转换成拼音
  12. java 反射与常用用法
  13. NOIP2016 天天爱跑步 80分暴力
  14. AspNetCore OpenId
  15. 创建和使用动态链接库(转)vs2008 vs2010
  16. upupw
  17. 向IOS模拟机上添加图片
  18. NOIP2017 心路历程
  19. [javaSE] GUI(Action事件)
  20. Java NIO中的Buffer

热门文章

  1. ACM学习历程—HDU 2795 Billboard(线段树)
  2. AtCoder Grand Contest 009 E:Eternal Average
  3. 转载:SharePoint 2010 自定义 字段 类型--------省市区联动
  4. 塞尔达:旷野之息个人对比上古卷轴V:天际
  5. 11_listview入门
  6. day5 面向对象
  7. C#——传值参数(3)
  8. linux 删除软链接
  9. Shader 模板缓冲和模板测试
  10. solidity 学习笔记 2 (二维数组)