举个栗子:

synchronized (monitor) {//  判断条件谓词是否得到满足while(!locked) {//  等待唤醒monitor.wait();}//  处理其他的业务逻辑
}

那为什么非要while判断,而不采用if判断呢?如下:

synchronized (monitor) {//  判断条件谓词是否得到满足if(!locked) {//  等待唤醒monitor.wait();}//  处理其他的业务逻辑
}

这是因为,如果采用if判断,当线程从wait中唤醒时,那么将直接执行处理其他业务逻辑的代码,但这时候可能出现另外一种可能,条件谓词已经不满足处理业务逻辑的条件了(也即是locked可能已经发生改变),从而出现错误的结果,于是有必要进行再一次判断,如下:

synchronized (monitor) {//  判断条件谓词是否得到满足if(!locked) {//  等待唤醒monitor.wait();if(locked) {//  处理其他的业务逻辑} else {//  跳转到monitor.wait(); }}
}

而循环则是对上述写法的简化,唤醒后再次进入while条件判断,避免条件谓词发生改变而继续处理业务逻辑的错误。

因此可以用double check 或者循环

多线程:为什么wait()需要放在循环中?相关推荐

  1. oracle双重for循环sql,Oracle 11g中for循环中的PL / SQL限制

    我有一个大约有3000万条记录的表,并且我想像这样循环遍历表中存在的记录: FOR i IN (SELECT * FROM tbl_items it Left join location lo ON ...

  2. R语言循环中break函数和next函数使用实战

    R语言循环中break函数和next函数使用实战 目录 R语言循环中break函数和next函数使用实战 #基础for循环 #带break的for循环

  3. Vue指令之v-for——迭代数组、迭代对象中的属性、迭代数字||v-for循环中key属性的使用

    v-for循环普通数组 v-for循环对象数组 v-for循环对象 v-for迭代数字 v-for循环中key属性的使用 <!DOCTYPE html> <html lang=&qu ...

  4. html页面如何循环遍历,遍历foreach循环中的HTML DOM元素

    5 个答案: 答案 0 :(得分:3) 您可以使用closest('tr')查找最近的父tr元素,然后使用index()获取行号.试试这个: $('td').click(function() { va ...

  5. matlab for 取数组,for循环中的MATLAB和单元格数组处理

    for循环中的MATLAB和单元格数组处理 我是MATLAB新手,想从数据库中提取一个单元格数组中的数据: sensors = [ 1] [23] [1] [ 0] [0.1000] [1x29 ch ...

  6. [vue] v-for循环中key有什么作用?

    [vue] v-for循环中key有什么作用? 四个字: 性能优化,简述: 让vue在更新数据的时候可以更有针对性的 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢 ...

  7. python循环中的else_python 循环中else的简单示例

    导读热词对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! 众多语言中都有if else这对条件选择组合,但是在python中还有更多else使用的地 ...

  8. java sleep 循环_while循环中的Thread.sleep()

    我注意到NetBeans警告我在我的Java代码中使用while循环中的Thread.sleep(),所以我已经对这个主题进行了一些研究 . 主要问题似乎是性能问题,当计数器仍处于休眠状态时,你的状态 ...

  9. Python入门--二重循环中的continue和break

    #二重循环中的break和continue #二重循环中的break和continue用于控制本层循环 ############################################# fo ...

最新文章

  1. swift_016(Swift 的闭包)
  2. 图片相似度识别_deepface:人脸识别\特征分析
  3. 萌新的Linux的学习之路(十) --ip设置管理
  4. 服务注册发现consul之五:Consul移除失效服务的正确姿势
  5. CSLA .NET 3.6支持Silverlight 2
  6. css H5端多行文本实现省略号
  7. 幂等问题 vs 如何判断是否是4的幂
  8. String类的特点和使用步骤
  9. Mysql执行计划含义,mysql执行计划介绍
  10. 飞秋2010下载不仅野草是如此
  11. 关于CleanMyMac常见问题与解答
  12. linux系统自动获取ip地址,Linux系统怎么自动获取ip地址用什么命令
  13. [bzoj 5064]B-number
  14. 海外代理ip池购买推荐,易路s5海外ip代理如何提取使用?
  15. 公众平台 python_微信公众平台SDK Python
  16. HTML实现图片360度循环旋转
  17. Day02| 第四期-阿里巴巴股票行情分析(一)
  18. 计算机毕业设计Java班费收支管理系统(源码+系统+mysql数据库+lw文档)
  19. 台式计算机设置事带麦耳机,win10系统的台式电脑耳机(带麦克风的那种)怎么设置?...
  20. CF 71A [字符串统计]

热门文章

  1. [Google Guava] 1.5-Throwables:简化异常和错误的传播与检查
  2. 《敏捷迭代开发:管理者指南》—第2章2.14节推荐读物
  3. 微软发布.NET Core Tools 1.0版本
  4. USACO1.1Broken Necklace[环状DP作死]
  5. 41. First Missing Positive
  6. UNIX网络编程——TCP/IP简介
  7. linux DNS服务器配置
  8. 你需要了解的 C++ 17 Top 19 新特性(附精彩评论)
  9. socket编程 及select poll epoll示例
  10. jq 比较两个时间是否在同一天_.NET CORE下最快比较两个文件内容是否相同的方法...