sleep ,wait,notify和notifyAll
cank:
http://blog.csdn.net/oracle_microsoft/article/details/6863662
1、这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。
sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。
2、最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。
Thread.Sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。
3、使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
通常,多线程之间需要协调工作:如果条件不满足,则等待;当条件满足时,等待该条件的线程将被唤醒。在Java中,这个机制的实现依赖于wait/notify。等待机制与锁机制是密切关联的。
例如:
synchronized(obj) {
while(!condition) {
obj.wait();
}
obj.doSomething();
}
当线程A获得了obj锁后,发现条件condition不满足,无法继续下一处理,于是线程A就wait()。
在另一线程B中,如果B更改了某些条件,使得线程A的condition条件满足了,就可以唤醒线程A :
synchronized(obj) {
condition = true;
obj.notify();
}
转载于:https://www.cnblogs.com/luofeng225/p/4053671.html
sleep ,wait,notify和notifyAll相关推荐
- 用实例揭示notify()和notifyAll()的本质区别
用实例揭示notify()和notifyAll()的本质区别 收藏 notify()和notifyAll()都是Object对象用于通知处在等待该对象的线程的方法.两者的最大区别在于: notifyA ...
- Java多线程协作(wait、notify、 notifyAll)
http://sunjun041640.blog.163.com/blog/static/25626832201041411210560/ Java监视器支持两种线程:互斥和 协作. 前面我们介绍了采 ...
- 【Java 线程的深入研究3】最简单实例说明wait、notify、notifyAll的使用方法
wait().notify().notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态. 这三个方法最终调用的都是jvm级的native方法.随着jvm运行平台的不同可能有些 ...
- 最简实例说明wait、notify、notifyAll的使用方法
/** * 转载请注明作者longdick http://longdick.iteye.com * */ wait().notify().notifyAll()是三个定义在Object类里的方 ...
- 多线程:线程之间的协作(join、wait、notify、notifyAll、await、signal、signalAll)
当多个线程可以一起工作去解决某个问题时,如果某些部分必须在其它部分之前完成,那么就需要对线程进行协调. join() 在线程中调用另一个线程的 join() 方法,会将当前线程挂起,而不是忙等待,直到 ...
- 为什么wait、notify、notifyAll方法定义在Object中而不是Thread类中
多线程概述 Java是一个支持多线程的开发语言,多线程并发执行任务可以充分利用CPU资源,提高多任务并发执行效率(注意区分:多线程并不会加快任务的执行速度,而是可以充分利用多核CPU让线程轮流进行工作 ...
- 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- Java并发编程—notify和notifyAll有什么区别?
原文作者:知乎用户 原文地址:https://www.zhihu.com/question/37601861/answer/145545371 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- Java并发编程—线程间协作方式wait()、notify()、notifyAll()和Condition
原文作者:Matrix海 子 原文地址:Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 目录 一.wait().notify()和notifyA ...
- 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. wait, notify 和 noti ...
最新文章
- es6 --- 使用proxy对数据进行劫持
- [react] 在React中怎么引用sass或less?
- Netty NioEventLoop 启动过程源码分析
- C++句柄类 [ 资深博主 ]
- QQ2013的PC版协议,0825包和0826的数据分析
- SVN修改文件夹名称
- python unpack java,Java中的python struct.unpack - java
- HHUOJ 1895 果冻豆
- 通过关键字查询地理坐标(天地图)
- 兼容IE浏览器下载文件
- Python-qqbot实现QQ群翻译机器人
- 多链路5G组网方案-支持国密算法的5G安全组网方案
- 无固定公网IP,群晖动态解析域名到动态公网IP
- python怎么判断真假_Python不超过10行代码就可实现人脸识别,教你辨别真假
- kue api文档说明
- raise InvalidSchema(“No connection adapters were found
- 深入理解halcon相机标定
- Java中使用IE Proxy代理的方法
- 线程池ExecutorService中submit和execute区别
- 免费的e文电子书下载网站!
热门文章
- [原创]Java Web——外卖配送系统/在线点餐系统
- 论文笔记之Understanding and Diagnosing Visual Tracking Systems
- Package | 解决 Could not build wheels for opencv-python which use PEP 517 and cannot be installed
- 微信摇一摇周边 红包
- 洛谷P1941 飞扬的小鸟
- Z39.50 图书信息检索
- 计算机系统--机器指令与汇编
- 计算机组成原理笔记(8)---机器指令、寻址方式
- google ble 语音spec(voiceverBLERemotecontrol)
- 关于二级域名与三级域名的解释