wait 和notify 在 synchronized 包含的范围中 必须与synchronized 使用同一个对象

可以在一个锁中设定 多个 condition 来执行等待的方法,这样的好处就是能实现多个

方法之间的等待执行。例如下面例子 的两个condition

class BoundedBuffer {

final Lock lock = new ReentrantLock();

final Condition notFull  = lock.newCondition(); //使用condition 来代替 wait 和 notify

final Condition notEmpty = lock.newCondition();

final Object[] items = new Object[100];

int putptr, takeptr, count;

public void put(Object x) throws InterruptedException {

lock.lock();

try {

while (count == items.length)

notFull.await();//这里要使用await 只是condition的专用方法

items[putptr] = x;

if (++putptr == items.length) putptr = 0;

++count;

notEmpty.signal();//这也是condition的专用方法

} finally {

lock.unlock();

}

}

public Object take() throws InterruptedException {

lock.lock();

try {

while (count == 0)

notEmpty.await();

Object x = items[takeptr];

if (++takeptr == items.length) takeptr = 0;

--count;

notFull.signal();

return x;

} finally {

lock.unlock();

}

}

转载于:https://www.cnblogs.com/mxyhws/p/3957225.html

_java5条件阻塞Condition的应用相关推荐

  1. python 线程超时设置_python 条件变量Condition(36)

    文章首发微信公众号,微信搜索:猿说python 对于线程与线程之间的交互我们在前面的文章已经介绍了 python 互斥锁Lock / python事件Event , 今天继续介绍一种线程交互方式 – ...

  2. Python 线程条件变量 Condition - Python零基础入门教程

    目录 一.Python 线程条件变量 Condition 函数 二.Python 线程条件变量 Condition 原理 三.Python 线程条件变量 Condition 使用 四.Python 线 ...

  3. 对条件变量(condition variable)的讨论

    作者:王东 1.1       什么是条件变量和条件等待? 简单的说: 条件变量(condition variable)是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待某个 ...

  4. SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing)

    SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing) 一,定价程序Pricing Procedure 所有定价中允许的条件类型都包含在定价程序中: ...

  5. 定义定价用途的条件类型(Condition Types)

    一.说明 条件的存取顺序(access sequences)可以设置若干个条件表(Condition Table),但仅有存取顺序还不能维护条件的记录.能够维护条件记录的是条件类型(Condition ...

  6. MyBatisPlus条件构造器Condition的用法

    场景 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/37194 基础搭建: https://blog.csdn.net/B ...

  7. python 很高兴问题_Python 3.7曾有一个很老的GIL竞态条件(race condition),我是这么解决的...

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 作者:Victor Stinner 作为Python最关键的组成部分之一:GIL(全局解释器锁),我花了4 ...

  8. 数据争用(data race) 和竞态条件(race condition)

    在有关多线程编程的话题中,数据争用(data race) 和竞态条件(race condition)是两个经常被提及的名词,它们两个有着相似的名字,也是我们在并行编程中极力避免出现的.但在处理实际问题 ...

  9. 别混淆数据争用(data race) 和竞态条件(race condition)

    在有关多线程编程的话题中,数据争用(data race) 和竞态条件(race condition)是两个经常被提及的名词,它们两个有着相似的名字,也是我们在并行编程中极力避免出现的.但在处理实际问题 ...

最新文章

  1. 颠覆性技术的兴起及其影响
  2. 硬核项目 | 用Arduino做一个神奇的悬浮灯!
  3. 计算机usb2.0失效,Win10电脑USB2.0-CRW没有驱动程序的解决方法
  4. C语言中Uint8_t数据类型
  5. vue2学习计划1-3 浏览器跨域问题(mock-api)
  6. 你应该要掌握的7种回归分析方法
  7. LeetCode:Remove Duplicates from Sorted List I II
  8. Java Timer、TimerTask
  9. arcgis重分类读不出值的解决办法?
  10. Viewpage+小圆点
  11. 手把手 VM虚拟机安装deepin系统
  12. Portraiture 3.5.6磨皮滤镜插件适用于Photoshop磨皮美化功能
  13. 2022-10-11 myql-exists子查询外表关联记录
  14. FZU 2158 数字密码
  15. colab使用入门(1)-安装库,保存/加载笔记本
  16. MySQL六大数据类型
  17. hiho 1082 : 然而沼跃鱼早就看穿了一切
  18. 在ArcGIS中创建Python工具(三)
  19. MacBook Pro M1 安装 MongoDB
  20. 一套简约线条手绘工作报告年终总结PPT模板

热门文章

  1. WinXp怎么开机进入Dos
  2. PCL1.8.0/ Qt5.7.0开发环境配置
  3. linux修改服务器时间_操作系统基础解析:Windows和Linux 到底有何不同?
  4. 四川教育考试网全国计算机,四川教育考试院
  5. RAID阵列及常用RAID
  6. 12linux目录结构13Linux目录详解
  7. MDP蒙特卡罗方法(四)
  8. C# set和get如何用
  9. oracle判断某列是否有单引号_sql注入二 ——数据库信息判断
  10. Tcpdump抓包实操