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. 调用await()方法进入休眠的线程可能会被中断,所以必须处理InterruptedException 异常





程序运行结果:可以看出以上的结果:有值了,才能被取走,被取走了,才能被生产一个值。


ReentrantLock和ReentrantReadWriteLock(有两种锁:一种为读操作锁,通过ReadWriteLock接口的readLock()方法获取,写操作锁通过ReadWriteLock接口的writeLock()方法获取。)类构造器都有一个布尔参数fair,默认为false,即非公平状态,当很多线程在等待锁时,随机选择一个来访问临界区,若fair值为true,则成为公平模式,选择的是等待时间最长的线程。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 办健康证吃了东西怎么办 吃宵夜脸肿了怎么办 晚上不吃宵夜饿了怎么办 办健康证身份证丢了怎么办 宁波二院怎么办健康证 健康证和培训证怎么办 楼下烧煤炉呛人怎么办 衣服染了笔渍怎么办 济宁二院怎么办健康证 刚按揭车的想卖怎么办 房子已过户银行不放贷怎么办 办房贷信用逾期给拒了怎么办 二手房过户了房贷下不来怎么办 没有房证的房子买卖怎么办 老公失踪房产证要他签字怎么办 税务机关对长期欠税怎么办 离婚有贷款的房子怎么办 买房没过户房主反悔怎么办 房子过户卖方爱人去世怎么办 黄浦区学生社会实践护照掉了怎么办 北京医保卡坏了怎么办 去了越南的签证怎么办 护照签证到期还在国外怎么办 办护照预约满了怎么办 未满16岁怎么办护照 办理护照采集指纹录不上怎么办 办理护照时指纹没有怎么办 未满16岁的怎么办护照 身份证照得太丑怎么办 武汉江夏怎么办健康证 小孩偏胖肚子大怎么办 手机安全中心密码忘记了怎么办 进京证一年12次怎么办 青霉素和头孢都过敏怎么办 手汗孢疹肿胀怎么办能吃消炎药吗 手机上办进京证怎么办 杭州公共自行车还车点满了怎么办 法院判决书下来对方不给钱怎么办 抓进看守所的人怎么办 在拘留所里病重抢救怎么办 昆明公租房户型确认后怎么办