CountDownLatch闭锁,join和yield的区别
CountDownLatch闭锁
CountDownLatch是一个同步工具类,join的增强版。允许一个或多个线程,等待其他一组线程完成操作,再继续执行
- public CountDownLatch(int count); 构造函数,初始化计数器值为count,count只能被设置一次
- public void await()throws InterruptedException; 调用await()方法的线程会被挂起,直到count值为0才继续执行
- public boolean await(longtimeout, TimeUnit unit)throws InterruptedException; 和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行
- public void countDown();将count值减1
它是通过控制计数器的值来达到等待的目的。当计数器的值>0时,countDownLatch.await()会阻塞当前线程,直到其他线程调用countDownLatch.countDown()将计数器的值减到0时,阻塞线程将被唤醒。计数器的值>0时调用await()方法不会阻塞当前线程。主线程必须在启动其他线程后立即调用CountDownLatch.await()方法。这样主线程的操作就会在这个方法上阻塞,直到其他线程完成各自的任务。
join阻塞当前线程等待线程
t.join()方法:阻塞调用此方法的线程(calling thread)进入TIMED_WAITING状态,直到线程t完成,此线程再继续;通常用于在main()主线程内,等待其它线程完成再结束main()主线程
- Join方法实现是通过wait()。 当main线程调用t.join时候,main线程会获得线程对象t的锁(wait意味着拿到该对象的锁),调用该对象的wait(),直到该对象唤醒main线程 ,比如退出后。这就意味着main线程调用t.join时,必须能够拿到线程t对象的锁。
join与countDownLatch区别
- join用于让当前执行线程等待join线程执行结束。
- 其实现原理是不停检查join线程是否存活,如果join线程存活则让当前线程永远wait。
- countDownLatch没有这个线程,只要count减小到0,不管被等待线程是否执行结束,等待线程都可以继续执行(被唤醒,进入可执行状态)。
yield与join方法的区别
yield()方法:暂停当前正在执行的线程对象,并允许执行其他线程。
- yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。
结论:yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。
join()方法:线程实例的join()方法可以使得一个线程在另一个线程结束后再执行,即也就是说使得当前线程可以阻塞其他线程执行;
- thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
CountDownLatch闭锁,join和yield的区别相关推荐
- 关于多线程中sleep、join、yield的区别
点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Good friends are like stars. You don't ...
- Java并发编程笔记之 CountDownLatch闭锁的源码分析
转 自: Java并发编程笔记之 CountDownLatch闭锁的源码分析 JUC 中倒数计数器 CountDownLatch 的使用与原理分析,当需要等待多个线程执行完毕后在做一件事情时候 C ...
- 并发编程-16AQS同步组件之CountDownLatch 闭锁
文章目录 脑图 CountDownLatch闭锁 示例 Thread#join() CountDownLatch CountDownLatch示例二 await一直等待其他线程执行完 CountDow ...
- 同步工具之CountDownLatch闭锁
CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待 ,即CountDownLatch允许一个或多个线程等待其他线程完成操作.闭锁可以延迟 ...
- Python中threading的join和setDaemon的区别及用法 例子
Python中threading的join和setDaemon的区别及用法 Python多线程编程时,经常会用到join()和setDaemon()方法,今天特地研究了一下两者的区别. 1.join ...
- CountDownLatch闭锁
CountDownLatch :闭锁,在完成某些运算时,只有其他所有线程的运算全部完成,当前运算才继续执行 方法: countDown():减少锁存器的计数,如果计数达到零,释放所有等待的线程 aw ...
- java sleep join_Java多線程之sleep,wait,join和yield關鍵字
在java或者android中,使用Thread和Runnable就可以玩多線程了,這個成本比較低,也沒什么好說的,今天主要是針對多線程中主要的關鍵字wait,sleep,join和yield做個筆記 ...
- 聊聊高并发(二十六)解析java.util.concurrent各个组件(八) 理解CountDownLatch闭锁
CountDownLatch闭锁也是基于AQS实现的一种同步器,它表示了"所有线程都等待,直到锁打开才继续执行"的含义.它和Semaphore的语意不同, Semaphore的获取 ...
- c++11中thread join和detach的区别
线程状态: 在一个线程的生存期内,可以在多种状态之间转换,不同的操作系统可以实现不同的线程模型,定义许多不同的线程状态,每个状态还可以包含多个子状态,但大体来说,如下几种状态是通用的: 1)就绪:参与 ...
最新文章
- plsql 为空显示 0 的函数_记住这三个检测函数,彻底清除公式当中的0值
- php连接oracle10g,php连接Oracle Database 10g Express Edition
- mysql配置文件调优
- 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第10章-滤波器设计
- 转译:Oracle 中 Object_iD 和 Data_Object_ID 的区别
- mysql教程or怎么用_MySQL中or语句用法示例
- SQL实战篇:SQL行列转换及真题
- 【模板】差分约束算法
- tensorflow中的Supervisor
- Spring Security Oauth2 认证(获取token/刷新token)流程
- Generator的异步编程
- stl非变易算法(一)
- 拓端tecdat|在Python和R中使用交叉验证方法提高模型性能
- QTableview
- python就业方向-学完Python的7大就业方向,哪个赚钱多?
- 整理一下vue 移动端模板框架搭建
- 搜狗收录提交入口-搜狗网站批量提交方法
- Epicor 调试 customization
- CIO40: IT从之“CRM”与“OA”
- Eclipse的JVM语言Xtend达到2.3 M7
热门文章
- 云服务器和共享主机,共享虚拟主机、独享虚拟主机还是云服务器?
- mysql innodb 大小,更改Innodb 数据页大小优化MySQL
- 对于试衣网的一点看法
- 阿里巴巴计划今日中午推出1688.com批发网
- 李航(统计学习方法第四章)
- 科研合作应该互相尊重
- 【木头Cocos2d-x 005】穷鬼之mac cocos2d-x环境搭建-成功!(VMWare + mac lion+xcode)
- 矩阵指数(The Exponential of a Matrix)
- 线性代数:矩阵的LU分解
- 怎么把win10设置Linux样式,老司机教你把win10系统界面换成win7样式的方法