Java——jdk1.5生产者消费者问题优化
来源:互联网 发布:淘宝香港发货是真的吗 编辑:程序博客网 时间:2024/06/09 15:18
之前的代码是唤醒所有的线程,影响了效率,这里对该问题实现优化,具体的细节在代码中与之前的博客比较吧
//使用jdk1.5多线程的实现方式解决一次唤醒所有线程性能低的问题//描述产品import java.util.concurrent.locks.*;class Product{ private String name; private int count; private boolean flag; //1:创建一把锁 private Lock lock = new ReentrantLock();//父类引用指向子类对象,多态 //得到和锁绑定的Condition对象,控制生产线程的唤醒和等待 private Condition pro = lock.newCondition(); //得到和锁绑定的Condition对象,控制消费线程的唤醒和等待 private Condition con = lock.newCondition(); //生产产品的功能 public void produce(String name){ lock.lock();//获取锁 try{ //if(flag){//把if改为while while(flag){ //IllegalMonitorStateException try{pro.await();}catch(InterruptedException e){e.printStackTrace();} } this.name = name+"..."+count; System.out.println(Thread.currentThread().getName()+"生产了..."+this.name); count++; flag = true; //唤醒消费线程,不再像之前,唤醒所有线程 con.signal(); } finally{ lock.unlock();//释放锁 } } //消费产品的功能 public void consume(){ lock.lock(); try{ while(!flag){ try{con.await();}catch(InterruptedException e){e.printStackTrace();} } System.out.println(Thread.currentThread().getName()+"...消费了..."+this.name); flag = false; //唤醒生产线程,不再像之前,唤醒所有线程 pro.signal(); } finally{ lock.unlock(); } }}//生产任务class Producer implements Runnable{ private Product pro; public Producer(Product pro){ this.pro = pro; } public void run(){ while(true){ pro.produce("笔记本"); } }}//消费任务class Consumer implements Runnable{ private Product pro; public Consumer(Product pro){ this.pro = pro; } public void run(){ while(true){ pro.consume(); } }}class test{ public static void main(String[] args){ Product pro = new Product(); Producer producer = new Producer(pro); Consumer consumer = new Consumer(pro); Thread t0 = new Thread(producer); Thread t1 = new Thread(producer); Thread t2 = new Thread(consumer); Thread t3 = new Thread(consumer); t0.start(); t1.start(); t2.start(); t3.start(); }}
阅读全文
2 0
- Java——jdk1.5生产者消费者问题优化
- java再复习——使用JDK1.5新特性优化生产者消费者
- JAVA——生产者与消费者以及JDK1.5以后新特性
- 生产者消费者问题——Java方案
- Java多线程—生产者-消费者问题
- 多线程-多生产者多消费者问题JDK1.5新特性
- Java 多线程 生产者消费者 jdk1.5后新方法
- 生产者——消费者问题
- java生产者 消费者问题
- Java生产者消费者问题
- java生产者消费者问题
- Java 生产者消费者问题
- java 生产者消费者问题
- Java生产者消费者问题 .
- [Java] 生产者&消费者问题
- Java 生产者消费者问题
- java 生产者消费者问题
- java 生产者消费者问题
- web前端十日谈-笔记
- 二分图的判定
- Laravel-学习笔记-视图(View)
- I/O复用模型
- Java排序算法——直接插入排序
- Java——jdk1.5生产者消费者问题优化
- Linux 系统监控、诊断工具之 IO wait
- 快速排序算法
- 关于TLS经验小结(中)
- 关于RedHat本地源的配置
- 洛谷 P2341 [HAOI2006]受欢迎的牛
- 更优秀的Java代码-技巧篇1
- 判断点在直线的左右那一侧
- 超简单,几行代码搞定Android底部导航栏