Java7并发编程--2、锁中使用多条件condition
来源:互联网 发布:网络u盾讀取服务器 编辑:程序博客网 时间:2024/05/17 22:20
在lock中提供了与之关联的条件,一个锁可能关联一个或多个条件,这些条件通过condition接口声明。目的是运行线程获取锁并且查看等待某一个条件是否满足,如果不满足则挂起直到某个线程唤醒它们。condition接口提供了挂起线程和唤起线程的机制;
介绍下下面一堆代码所做的事情:使用了5个线程设置(生产)一个数值,使用5个线程移除(消费)这个数值;
在add 和 remoe中使用Condition来代替监视器锁的wait操作和唤醒操作。
值得注意的是:
1. 读写线程数量如果不对等,将会出现死锁。
2. 所有的条件Condition必须使用对等的锁对象来创建lock.newCondition();
3. 条件必须用在lock() 和 unlock() 方法之间。
4. 在判定条件是否满足,需要在循环中判定,未满足条件的不能离开循环体,否则数据将得不到我们想要的结果
介绍下下面一堆代码所做的事情:使用了5个线程设置(生产)一个数值,使用5个线程移除(消费)这个数值;
在add 和 remoe中使用Condition来代替监视器锁的wait操作和唤醒操作。
值得注意的是:
1. 读写线程数量如果不对等,将会出现死锁。
2. 所有的条件Condition必须使用对等的锁对象来创建lock.newCondition();
3. 条件必须用在lock() 和 unlock() 方法之间。
4. 在判定条件是否满足,需要在循环中判定,未满足条件的不能离开循环体,否则数据将得不到我们想要的结果
5. 调用await()方法进入休眠的线程可能会被中断,所以必须处理InterruptedException 异常
程序运行结果:可以看出以上的结果:有值了,才能被取走,被取走了,才能被生产一个值。
ReentrantLock和ReentrantReadWriteLock(有两种锁:一种为读操作锁,通过ReadWriteLock接口的readLock()方法获取,写操作锁通过ReadWriteLock接口的writeLock()方法获取。)类构造器都有一个布尔参数fair,默认为false,即非公平状态,当很多线程在等待锁时,随机选择一个来访问临界区,若fair值为true,则成为公平模式,选择的是等待时间最长的线程。
0 0
- Java7并发编程--2、锁中使用多条件condition
- 在锁中使用多条件Condition
- [笔记][Java7并发编程实战手册]2.4在同步代码中使用条件-生产者与消费者
- 并发编程--并发编程包Condition条件
- Java并行编程-lock中使用多条件condition(生产者消费者模式实例)
- Java并发编程-10-在锁中使用多条件-生产者消费者问题
- (二)线程同步_7---在一个锁中使用多个条件(Condition)
- 并发编程学习总结(八) :java中synchronized关键字使用详解 对象锁的相关条件的使用(2)
- Concurrency Utilities 并发处理(2)Condition 条件变量
- java 并发编程(四)之临界区中使用条件
- java7并发编程学习笔记
- JAVA7并发编程手册笔记
- java并发编程系列之Condition的使用
- 【并发编程】concurrent包的Condition使用详解
- Java并发编程 之 Condition与ReentrantLock的使用
- Java7并发编程--5、并发集合
- Race condition【竟态条件】(java并发编程实战第二章)
- 【java并发】条件阻塞Condition的应用
- 文章标题
- img标签的使用
- js自定义事件
- 设计模式总结之TemplateMethod Pattern(模版方法模式)
- Java生成随机指定长度密码
- Java7并发编程--2、锁中使用多条件condition
- 第四章 4.5 递增和递减运算符
- Java环境变量的具体配置
- MSP430捕获器简单实用
- ajax子页面main_sub.html
- openCV-Python笔记二:视频捕获
- 正则表达式---url,ip
- Android屏幕适配全攻略(最权威的官方适配指导)
- sensetime实习面试回忆