多线程学习-方法join的使用
来源:互联网 发布:矩阵可逆的条件 编辑:程序博客网 时间:2024/05/21 05:43
引入
在很多情况下,主线程创建并启动子线程,如果子线程要进行大量的耗时计算,主线程往往将早于子线程结束之前结束。这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据的值,就要用到join()方法了。方法join()的作用是等待线程对象销毁。
使用的主要的类
public class MyObject { private int value; public void setValue(int value){ System.out.println("set value:"+value); this.value=value; } public int getValue(){ return value; }}
没有使用join方法的情况
这种情况下演示,需求是主线程要在子线程给MyObject赋值后拿到MyObject对象的值,没有使用join()方法会导致主线程会在子线程之前就结束。
子线程的代码:
public class MyThread extends Thread{ private MyObject mo; public MyThread(MyObject mo){ this.mo=mo; } public void run(){ mo.setValue(100); }}
运行的代码
public class Run { public static void main(String[] args) { MyObject mo=new MyObject(); MyThread mt=new MyThread(mo); mt.start(); int value=mo.getValue(); System.out.println("get value:"+value+" main thread end."); }}
运行结果为:
get value:0 main thread end.
set value:100
2.用join()方法类解决
join()方法的作用是使所属的线程对象x正常执行run()方法中的人物,而使当前线程z
进行无限期的阻塞,等待线程x销毁后在继续执行线程z后面的代码。使线程具有排队运行的作用,有着类似同步的运行效果。
public class Run { public static void main(String[] args) { try { MyObject mo = new MyObject(); MyThread mt = new MyThread(mo); mt.start(); mt.join(); //使用join()方法,先执行完mt线程的run方法中的任务 int value = mo.getValue(); System.out.println("get value:" + value); } catch (InterruptedException e) { e.printStackTrace(); } }}
运行结果:
set value:100
get value:100
其他注意的点
- 在join过程中,如果当前线程对象被中断,则当前线程出现异常,InterruptedException。
- 方法join(long)中的参数是设置等待的时间。
- 方法join(long)的功能在内部是使用wait(long)方法来实现的,所以join(long)方法具有释放锁的特点,而Thread.sleep(long)方法具有不释放锁的特点。
0 0
- 多线程学习-方法join的使用
- 初学Java多线程:join方法的使用
- 初学Java多线程:join方法的使用
- 初学Java多线程:join方法的使用
- Java多线程之join方法的使用
- 多线程的join()方法
- 多线程的join方法
- 《多线程编程》学习之八:方法join()的使用、类ThreadLocal的使用
- java多线程学习之使用join()方法实现线程插队
- Java多线程学习 (二) Thread的join()方法
- Java多线程的join方法
- Java多线程初学者指南(5):join方法的使用
- Java多线程初学者指南(5):join方法的使用
- Java多线程初学者指南(5):join方法的使用
- Java多线程初学者指南(5):join方法的使用
- Java多线程初学者指南(5):join方法的使用
- 5. 初学Java多线程:join方法的使用
- 多线程编程--锁机制及join方法的使用
- Sitescope的使用总结
- 面试中需要注意的一些问题及准备
- [Golang]OS系统调用浅析
- Android Studio:Multiple dex files define Landroid/support/annotation/AnimRes
- Android自定义Camera
- 多线程学习-方法join的使用
- 浏览器跨域问题的总结 目录
- 简单描述XML和JSON
- 自定义相机截取矩形框中的内容
- 个人面试提问企业必问的问题
- Bonfire: Seek and Destroy
- Ubuntu下git的安装和配置
- 算法:二分查找算法(c++)
- Altium Designer元器件生成3D封装图