前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java并发编程——join的用法解析

Java并发编程——join的用法解析

作者头像
向着百万年薪努力的小赵
发布于 2022-12-02 01:35:04
发布于 2022-12-02 01:35:04
3100
举报
文章被收录于专栏:小赵的Java学习小赵的Java学习

join方法的作用;

目的是保证线程执行结果的可见性 什么意思呢,就是不出结果不罢休,我用了join方法,那你们就要等我执行完结果出来了你们才能继续执行。

也可以说是同步,它可以使得线程之间的并行执行变为串行执行。在A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行。 另外,Thread.join的本质其实是wait/notifyall

join方法的原理就是调用相应线程的wait方法进行等待操作的,例如A线程中调用了B线程的join方法,则相当于在A线程中调用了B线程的wait方法,当B线程执行完(或者到达等待时间),B线程会自动调用自身的notifyAll方法唤醒A线程,从而达到同步的目的。 何以见得,上源码:

and,join()方法中如果传入参数,则表示这样的意思:如果A线程中掉用B线程的join(10),则表示A线程会等待B线程执行10毫秒,10毫秒过后,A、B线程并行执行。需要注意的是,jdk规定,join(0)的意思不是A线程等待B线程0秒,而是A线程等待B线程无限时间,直到B线程执行完毕,即join(0)等价于join()

join()和start()调用顺序问题

join()方法必须在线程start()方法调用之后调用才有意义。一个线程都还未开始运行,同步是不具有任何意义的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【高薪程序员必看】万字长文拆解Java并发编程!(3-2):并发共享问题的解决与分析
它们都是之间协作的手段,只有拥有对象锁的线程才能调用这些方法,否则会出现IllegalMonitorStateException异常
摘星.
2025/05/20
310
【高薪程序员必看】万字长文拆解Java并发编程!(3-2):并发共享问题的解决与分析
Thread 的join方法解释
  Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行。具体看代码:
全栈程序员站长
2022/08/14
4420
java 线程方法join的简单总结
在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入,由于CPU时间调度上的问题,写入数据会被多次的覆盖,所以就要使线程同步。 同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。
葆宁
2019/04/18
4270
Java并发编程之join方法的使用
在多线程编程中,有时候一个线程的执行可能要依赖于另外一个线程的执行结果才能执行,JDK提供了join方法来实现这种功能。
布禾
2021/03/15
5570
高并发编程-Thread#join方法的使用及使用场景分析
乍理解起来有点晦涩, 简单来说: 等待该线程终止. 需要明确的是主线程等待子线程(假设有个子线程thread)的终止。即在主线程的代码块中,如果碰到了thread.join()方法,此时主线程需要等子线程thread结束了(Waits for this thread to die.),才能继续执行thread.join()之后的代码块。
小小工匠
2021/08/17
5110
java并发编程的艺术——第四章总结
用户1134788
2018/01/05
8690
java并发编程的艺术——第四章总结
Java并发编程
单核CPU下,线程实际还是 串行执行 的。操作系统中有一个组件叫任务调度器,将CPU的时间片(windows下时间片最小约为15毫秒)分给不同的程序使用,只是由于CPU在线程间(时间片很短)的切换非常快,人类感觉是 同时运行的 。总结一句话: 微观串行,宏观并行。
Remember_Ray
2020/08/05
8850
Java并发编程的总结和思考
编写优质的并发代码是一件难度极高的事情。Java语言从第一版本开始内置了对多线程的支持,这一点在当年是非常了不起的,但是当我们对并发编程有了更深刻的认识和更多的实践后,实现并发编程就有了更多的方案和更好的选择。本文是对并发编程的一点总结和思考,同时也分享了Java 5以后的版本中如何编写并发代码的一点点经验。
大龄老码农-昊然
2021/04/03
3120
Java并发编程的总结和思考
Java并发编程(一)Thread详解
由上描述,可以得知线程作为cpu的基本调度单位,只有把多线程用好,才能充分利用cpu的多核资源。
磊哥
2018/10/11
4980
Java并发编程(一)Thread详解
Java并发编程基础
在不同的 JVM 以及 操作系统 上,线程规划会存在差异,有些操作系统甚至会忽略对线程优先级的设定。 线程优先级不能作为程序正确性的依赖,因为操作系统可以完全不用理会 Java 线程对于优先级的设定。
103style
2022/12/19
2140
Java并发编程基础
【并发编程】线程的基础概念
进程是指运行中的程序。 比如我们使用钉钉,浏览器,需要启动这个程序,操作系统会给这个程序分配一定的资源(占用内存资源)。
程序员波特
2024/03/31
1230
【并发编程】线程的基础概念
Java并发编程的艺术(六)——线程间的通信
多条线程之间有时需要数据交互,下面介绍五种线程间数据交互的方式,他们的使用场景各有不同。 1. volatile、synchronized关键字 PS:关于volatile的详细介绍请移步至:Java并发编程的艺术(三)——volatile 1.1 如何实现通信? 这两种方式都采用了同步机制实现多条线程间的数据通信。与其说是“通信”,倒不如说是“共享变量”来的恰当。当一个共享变量被volatile修饰 或 被同步块包裹后,他们的读写操作都会直接操作共享内存,从而各个线程都能看到共享变量最新的值,也就是实现了
大闲人柴毛毛
2018/03/09
9120
Java并发编程,互斥同步和线程之间的协作
Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLock。
李红
2019/06/03
4730
并发多线程学习(五)Java线程的状态及主要转化方法
处于NEW状态的线程此时尚未启动。这里的尚未启动指的是还没调用Thread实例的start()方法。
用户10168815
2023/02/28
2980
并发多线程学习(五)Java线程的状态及主要转化方法
Java 并发编程·Java 并发
可能正在运行,也可能正在等待 CPU 时间片。包含了操作系统线程状态中的 Running 和 Ready。
数媒派
2022/12/01
2.8K0
Java并发编程(六)
随着计算机硬件的快速发展,现代计算机系统的性能越来越强大。然而,单个线程的性能却没有相应地提高。这就导致了多线程编程的兴起。在多线程编程中,多个线程可以同时运行,从而提高了程序的整体性能。
疯狂的KK
2023/03/17
1850
Java并发编程之基础
使用FutureTask可以用泛型指定线程的返回值类型(Runnable的run方法没有返回值)
Java微观世界
2025/01/21
840
Java并发编程之基础
Java并发编程之wait、notify和join原理
使用while循环去循环判断一个条件,而不是使用if只判断一次条件;即wait()要在while循环中
Java微观世界
2025/01/21
1070
Java并发编程之wait、notify和join原理
Java并发编程系列:ReentrantLock
ReentrantLock和synchronized都是提供了同步的功能,JDK1.6之后对synchronized性能进行了优化,所以两者的性能上几乎没什么区别,但是ReentrantLock提供了了一些高级功能。
chengcheng222e
2021/11/04
2770
sleep、yield、join方法简介与用法 sleep与wait区别 多线程中篇(十四)
Object中的wait、notify、notifyAll,可以用于线程间的通信,核心原理为借助于监视器的入口集与等待集逻辑
noteless
2019/03/11
1.8K0
sleep、yield、join方法简介与用法 sleep与wait区别 多线程中篇(十四)
相关推荐
【高薪程序员必看】万字长文拆解Java并发编程!(3-2):并发共享问题的解决与分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档