博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并发编程实战6-线程之间的通信-深入解析Condition源码
阅读量:4126 次
发布时间:2019-05-25

本文共 1804 字,大约阅读时间需要 6 分钟。

  • Object类的几个方法

    • notify方法:只会随机唤醒一个wait线程,然后此wait线程将会继续执行
    • notifyAll方法:会唤醒所有的wait线程,所有wait线程将会全部执行
  • 显示锁的condition对象

    • 对于Object类的wait和notify方法有一定的缺陷,即无法精确唤醒指定的线程。所以引入了lock的condition对象,可以对不同的条件进行判断,来选择唤醒不同的线程
      import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @author: ZouTai * @date: 2018/4/9 * @description: */public class ConditionBoundedBuffer {
      private Lock lock = new ReentrantLock(); /** * 这里使用生产者-消费者模式 */ private Condition product = lock.newCondition(); private Condition consume = lock.newCondition(); private final int max = 10; int count = 0; public void put() throws InterruptedException { lock.lock(); try { while (count >= max) { System.out.println(Thread.currentThread().getName()+"生产过量,停止生产..."); /** * 1、生产过量,停止生产:生产者等待 */ product.await(); } count++; /** * 2、唤醒消费者 */ consume.signal(); System.out.println(Thread.currentThread().getName()+"生产-库存变为:"+count); } finally { lock.unlock(); } } public void take() throws InterruptedException { lock.lock(); try { while (count == 0) { System.out.println(Thread.currentThread().getName()+"库存为空,无法购买..."); /** * 3、库存为空,无法购买:消费者等待 */ consume.await(); } count--; System.out.println(Thread.currentThread().getName()+"消费-库存还剩:"+count); /** * 4、唤醒生产者 */ product.signal(); } finally { lock.unlock(); } }}
  • condition源码解析:

转载地址:http://khepi.baihongyu.com/

你可能感兴趣的文章
在csdn博客上添加qq聊天窗口插件
查看>>
launch failed.Binary not found(CDT---eclipse编写c++出现的问题)
查看>>
Qt开发的程序添加ico图标
查看>>
三系统安装win7+ubuntu+win8以及出现的问题
查看>>
Win8双系统下硬盘某分区无法访问的解决方案
查看>>
CSDN全国巡讲---重庆大学站
查看>>
SQLITE 修改表结构
查看>>
ubuntu支持中文输入
查看>>
mtd命令及制作ubi镜像做根文件系统
查看>>
lighttpd+php(fastcgi) 移植到arm-linux
查看>>
lighttp+php+arm-ubuntu上传文件(带滚动条)
查看>>
三大WEB服务器对比分析(apache ,lighttpd,nginx)
查看>>
HTTP协议详解
查看>>
关于linux的tcp/udp缓存
查看>>
h264 profile & level
查看>>
微信开放平台API开发资料
查看>>
编译lua5.3.3
查看>>
一道很有趣的关于printf的笔试题
查看>>
LINUX下挂载usb
查看>>
关于进程通信的实例-管道
查看>>