JAVA多线程 join() 方法详解及应用场景
来源:互联网 发布:星矢和纱织 知乎 编辑:程序博客网 时间:2024/05/29 16:38
在某些情况下,主线程创建并启动了子线程,如果子线程中需要进行大量的耗时运算,主线程往往将早于子线程结束之前结束,如果主线程想等待子线程执行完毕后,获得子线程中的处理完的某个数据,就要用到join方法了,方法join()的作用是等待线程对象呗销毁。
public class Test {public static class MyThread extends Thread {@Overridepublic void run() {try {int m = (int) (Math.random() * 10000);System.out.println("我在子线程中会随机睡上0-9秒,时间为="+m);Thread.sleep(m);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) throws InterruptedException {MyThread myThread =new MyThread();myThread.start();myThread.join();System.out.println("正常情况下肯定是我先执行完,但是加入join后,main主线程会等待子线程执行完毕后才执行");}}结果为:
我在子线程中会随机睡上0-9秒,时间为=9566
正常情况下肯定是我先执行完,但是加入join后,main主线程会等待子线程执行完毕后才执行
在主线程中,加入了myThread.join(); 把谁加入了就要等谁。
同时join还有join(millis)方法,可以加入等待时间,效果上类似sleep,但是还是有实际区别的。
join底层是wait方法,所以它是会释放对象锁的,而sleep在同步的方法中是不释放对象锁的,只有同步方法执行完毕,其他线程才可以执行。
使用场景
曾经做过一个联通的增值业务项目,其中有一个业务需要给联通方暴漏接口,他们调用我们的接口,我们进行业务处理后,再返回结果,接口要求是同步的,实时返回。如果异步的就可以用消息队列解决了,吧整个业务逻辑中比较费时间的都放在了子线程中运行,子线程跑完后在交由主线程返回结果。当时用的是java中的栅栏 CyclicBarrier ,现在想想用join也是可以实现的。
0 0
- JAVA多线程 join() 方法详解及应用场景
- java多线程中的join方法详解
- java多线程中的join方法详解
- JAVA多线程join方法入门详解
- java多线程join()详解
- Java多线程应用场景
- Java多线程 应用场景
- java多线程-join方法
- Java 多线程join方法
- java多线程join方法
- java基本教程之join方法详解 java多线程教程
- java基本教程之join方法详解 java多线程
- java 多线程并行求和 之 join() 方法应用
- java多线程-join方法详解(附面试题)
- Java多线程编程----线程间通信--join()方法详解
- Java多线程的应用场景
- Java多线程的应用场景
- java 多线程应用场景叙述
- Python的While循环与逻辑判断语法
- iOS 10 开发适配系列 之 权限Crash问题
- 第12周项目5-迷宫问题之图深度优先遍历解法
- 基础概念笔记
- spring的beanFactory和factoryBean
- JAVA多线程 join() 方法详解及应用场景
- svn 更新项目报错
- phpcms导入数据库注意的地方
- 上传图片
- c程序的调用过程-----栈帧
- shell脚本查找、抽取指定字符串的方法
- TabBarIOS
- OpenGL缓冲区对象之VAO
- 独立集