Condition:Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。条件(也称为条件队列 或条件变量)为线程提供了一个含义,以便在某个状态条件现在可能为 true 的另一个线程通知它之前,一直挂起该线程(即让其“等待”)。因为访问此共享状态信息发生在不同的线程中,所以它必须受保护,因此要将某种形式的锁与该条件相关联。等待提供一个条件的主要属性是:以原子方式 释放相关的锁,并挂起当前线程,就像 Object.wait 做的那样。Condition 实例实质上被绑定到一个锁上。要为特定 Lock 实例获得 Condition 实例,请使用其 newCondition() 方法。 public class CangKu { private boolean isFull=false;//未满 private ReentrantLock lock=new ReentrantLock(); private Condition notfullCondition=lock.newCondition(); private Condition notemptCondition=lock.newCondition(); //放入数据 public void put() { //申请锁 lock.lock(); if(!this.isFull) { try { System.out.println("放满了,可以来取"); isFull=!isFull; this.notemptCondition.signal(); } catch(Exception e) { e.printStackTrace(); }finally { //释放锁 lock.unlock(); } } else { try { this.notfullCondition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } } //取得数据 public void get() { //申请锁 lock.lock(); if(this.isFull) { try { System.out.println("取完了,来放"); isFull=!isFull; this.notfullCondition.signal(); } catch(Exception e) { e.printStackTrace(); }finally { //释放锁 lock.unlock(); } } else { try { this.notemptCondition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } } } //get public class GetThread implements Runnable { private CangKu ck; public GetThread(CangKu ck) { this.ck = ck; new Thread(this).start(); } public void run() { while(true) { this.ck.get(); } } } //put public class PutThread extends Thread { private CangKu ck; public PutThread(CangKu ck) { this.ck = ck; this.start(); } public void run() { while(true) { this.ck.put(); } } } public class ConditionMain { /** * Condition实例测试 */ public static void main(String[] args) { CangKu cu=new CangKu(); PutThread pth=new PutThread(cu); GetThread gth=new GetThread(cu); } } |
行业聚焦 面试交流 职位推荐 开发视频 技术交流 腾讯微博 新浪微博
友情链接:课课家教育 阿里云 鲜果 W3Cfuns前端网 中国企业家 环球企业家 投资界 传媒梦工场 MSN中文网 Android开发者社区 cnbeta 投资中国网 又拍云存储 美通说传播 IT茶馆 网商在线 商业评论网 TechOrange IT时代周刊 3W创新传媒 开源中国社区 二维工坊 Iconfans 推酷 智能电视网 FreeBuf黑客与极客 财经网 DoNews 凤凰财经 新财富 eoe移动开发者社区 i黑马 网易科技 新浪科技 搜狐IT 创业家 创业邦 腾讯财经 福布斯中文网 天下网商 TechWeb 雷锋网 新浪创业 和讯科技 品途O2O 极客公园 艾瑞网 抽屉新热榜 卖家网 人民网通信频道 拉勾网 创新派 简单云主机
手机版|黑名单|守望者 成才网 在线教育 linux 高级程序设计 C/C++ 大数据
( 蜀ICP备14029946号 )
成都守望者科技有限公司 © 2013-2016 All Rights Reserved