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相关推荐

  1. 用实例揭示notify()和notifyAll()的本质区别

    用实例揭示notify()和notifyAll()的本质区别 收藏 notify()和notifyAll()都是Object对象用于通知处在等待该对象的线程的方法.两者的最大区别在于: notifyA ...

  2. Java多线程协作(wait、notify、 notifyAll)

    http://sunjun041640.blog.163.com/blog/static/25626832201041411210560/ Java监视器支持两种线程:互斥和 协作. 前面我们介绍了采 ...

  3. 【Java 线程的深入研究3】最简单实例说明wait、notify、notifyAll的使用方法

    wait().notify().notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态. 这三个方法最终调用的都是jvm级的native方法.随着jvm运行平台的不同可能有些 ...

  4. 最简实例说明wait、notify、notifyAll的使用方法

    /** *  转载请注明作者longdick    http://longdick.iteye.com * */ wait().notify().notifyAll()是三个定义在Object类里的方 ...

  5. 多线程:线程之间的协作(join、wait、notify、notifyAll、await、signal、signalAll)

    当多个线程可以一起工作去解决某个问题时,如果某些部分必须在其它部分之前完成,那么就需要对线程进行协调. join() 在线程中调用另一个线程的 join() 方法,会将当前线程挂起,而不是忙等待,直到 ...

  6. 为什么wait、notify、notifyAll方法定义在Object中而不是Thread类中

    多线程概述 Java是一个支持多线程的开发语言,多线程并发执行任务可以充分利用CPU资源,提高多任务并发执行效率(注意区分:多线程并不会加快任务的执行速度,而是可以充分利用多核CPU让线程轮流进行工作 ...

  7. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  8. Java并发编程—notify和notifyAll有什么区别?

    原文作者:知乎用户 原文地址:https://www.zhihu.com/question/37601861/answer/145545371 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  9. Java并发编程—线程间协作方式wait()、notify()、notifyAll()和Condition

    原文作者:Matrix海 子 原文地址:Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 目录 一.wait().notify()和notifyA ...

  10. 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. wait, notify 和 noti ...

最新文章

  1. es6 --- 使用proxy对数据进行劫持
  2. [react] 在React中怎么引用sass或less?
  3. Netty NioEventLoop 启动过程源码分析
  4. C++句柄类 [ 资深博主 ]
  5. QQ2013的PC版协议,0825包和0826的数据分析
  6. SVN修改文件夹名称
  7. python unpack java,Java中的python struct.unpack - java
  8. HHUOJ 1895 果冻豆
  9. 通过关键字查询地理坐标(天地图)
  10. 兼容IE浏览器下载文件
  11. Python-qqbot实现QQ群翻译机器人
  12. 多链路5G组网方案-支持国密算法的5G安全组网方案
  13. 无固定公网IP,群晖动态解析域名到动态公网IP
  14. python怎么判断真假_Python不超过10行代码就可实现人脸识别,教你辨别真假
  15. kue api文档说明
  16. raise InvalidSchema(“No connection adapters were found
  17. 深入理解halcon相机标定
  18. Java中使用IE Proxy代理的方法
  19. 线程池ExecutorService中submit和execute区别
  20. 免费的e文电子书下载网站!

热门文章

  1. [原创]Java Web——外卖配送系统/在线点餐系统
  2. 论文笔记之Understanding and Diagnosing Visual Tracking Systems
  3. Package | 解决 Could not build wheels for opencv-python which use PEP 517 and cannot be installed
  4. 微信摇一摇周边 红包
  5. 洛谷P1941 飞扬的小鸟
  6. Z39.50 图书信息检索
  7. 计算机系统--机器指令与汇编
  8. 计算机组成原理笔记(8)---机器指令、寻址方式
  9. google ble 语音spec(voiceverBLERemotecontrol)
  10. 关于二级域名与三级域名的解释