利用两个条件变量快速实现阻塞队列呢?

public class BlockedQueue<T>{final Lock lock =new ReentrantLock();// 条件变量:队列不满  final Condition notFull = lock.newCondition();// 条件变量:队列不空  final Condition notEmpty = lock.newCondition();// 入队void enq(T x) {lock.lock();try {while (队列已满){// 等待队列不满notFull.await();}  // 省略入队操作...// 入队后, 通知可出队notEmpty.signal();}finally {lock.unlock();}}// 出队void deq(){lock.lock();try {while (队列已空){// 等待队列不空notEmpty.await();}  // 省略出队操作...// 出队后,通知可入队notFull.signal();}finally {lock.unlock();}  }
}

不过,这里你需要注意,Lock 和 Condition 实现的管程,线程等待和通知需要调用 await()、signal()、signalAll(),它们的语义和 wait()、notify()、notifyAll() 是相同的。但是不一样的是,Lock&Condition 实现的管程里只能使用前面的 await()、signal()、signalAll(),而后面的 wait()、notify()、notifyAll() 只有在 synchronized 实现的管程里才能使用。如果一不小心在 Lock&Condition 实现的管程里调用了 wait()、notify()、notifyAll(),那程序可就彻底玩儿完了。

Java并发编程实战~Condition相关推荐

  1. java 多线程缓存_[Java教程]【JAVA并发编程实战】12、使用condition实现多线程下的有界缓存先进先出队列...

    [Java教程][JAVA并发编程实战]12.使用condition实现多线程下的有界缓存先进先出队列 0 2016-11-29 17:00:10 package cn.study.concurren ...

  2. aqs clh java_【Java并发编程实战】—– AQS(四):CLH同步队列

    在[Java并发编程实战]-–"J.U.C":CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形. 其主要从双方面进行了改造:节点的结构与节点等待机制.在结构上引入了 ...

  3. Java并发编程实战_不愧是领军人物!这种等级的“Java并发编程宝典”谁能撰写?...

    前言 大家都知道并发编程技术就是在同一个处理器上同时的去处理多个任务,充分的利用到处理器的每个核心,最大化的发挥处理器的峰值性能,这样就可以避免我们因为性能而产生的一些问题. 大厂的核心负载肯定是非常 ...

  4. 【极客时间】《Java并发编程实战》学习笔记

    目录: 开篇词 | 你为什么需要学习并发编程? 内容来源:开篇词 | 你为什么需要学习并发编程?-极客时间 例如,Java 里 synchronized.wait()/notify() 相关的知识很琐 ...

  5. 《Java 并发编程实战》--读书笔记

    Java 并发编程实战 注: 极客时间<Java 并发编程实战>–读书笔记 GitHub:https://github.com/ByrsH/Reading-notes/blob/maste ...

  6. Java并发编程实战笔记2:对象的组合

    设计线程安全的类 在设计现车让安全类的过程之中,需要包含以下三步: 找出构成对象状态的所有变量 找出约束状态变量的不变性条件 建立对象状态的并发访问策略 实例封闭 通过封闭机制与合适的加锁策略结合起来 ...

  7. Java并发编程实战————恢复中断

    中断是一种协作机制,一个线程不能强制其他线程停止正在执行的操作而去执行其他操作. 什么是中断状态? 线程类有一个描述自身是否被中断了的boolean类型的状态,可以通过调用 .isInterrupte ...

  8. Java并发编程实战————Executor框架与任务执行

    引言 本篇博客介绍通过"执行任务"的机制来设计应用程序时需要掌握的一些知识.所有的内容均提炼自<Java并发编程实战>中第六章的内容. 大多数并发应用程序都是围绕&qu ...

  9. Java并发编程实战————Semaphore信号量的使用浅析

    引言 本篇博客讲解<Java并发编程实战>中的同步工具类:信号量 的使用和理解. 从概念.含义入手,突出重点,配以代码实例及讲解,并以生活中的案例做类比加强记忆. 什么是信号量 Java中 ...

最新文章

  1. 如何实现容器透明,内容不透明?
  2. VR视觉健康标准在穗发布 专家:VR使用不要超过45分钟
  3. Excel自定义格式的小技巧
  4. 前后端数据交互的几个方法
  5. 设置模态框开始是隐藏状态_有限元仿真分析误差来源之材料参数设置,小心为妙!...
  6. Memcache 分布式高可用集群介绍
  7. MDK4 如何生成bin文件
  8. 莫斯科国立大学更新VQMT的测量指标
  9. log4j.properties log4j.xml 路径问题
  10. Mina网络通信框架
  11. img 样式单和属性
  12. supervisord的安装
  13. 我的博客也是男的(还好)
  14. windows照片查看器没了_装机必备|Windows 上用得最爽的18款高效软件
  15. 微信公众号文章采集思路
  16. 2022年世界最强与最弱的护照:日本和新加坡并列第一,德国和韩国并列第二,美国和英国排名回升 | 美通社头条...
  17. 【C语言】5个成绩,去掉最高分,去掉最低分,求 平均分
  18. 惠州 菜鸟机器人_马云在惠州建了一个“秘密基地”,超震撼!
  19. 刷屏器!简单!快速!稳定!可控制速度!
  20. join语句的执行顺序

热门文章

  1. 论文浅尝 | GEOM-GCN: Geometric Graph Convolutional Networks
  2. 征稿 | 2019年全国知识图谱与语义计算大会(CCKS2019)投稿时间延长
  3. ML/DL常用评估方法
  4. leetcode--动态规划(Easy)
  5. tensorflow1、2会话、变量、feed、fetch、最小二乘法
  6. android 瀑布流
  7. C语言 · 8皇后问题
  8. 第二部分_搭建Java Web开发环境与配置Tomcat服务器JSP详解
  9. Head first servlet and jsp学习笔记
  10. 12.4scrum report