Java多线程之生产者消费者2

来源:互联网 发布:淘货源软件下载 编辑:程序博客网 时间:2024/06/16 19:16

0.前文

synchronized 类所写的生产者消费者demo请参见我的文章:

http://blog.csdn.net/caicongyang/article/details/50411958

1.本实例讲诉Lock类API

package com.ccy.thread.demo;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class ProducerConsumerDemo2 {public static void main(String[] args) {Resource2 r = new Resource2();Producer2 pro = new Producer2(r);Consumer2 con = new Consumer2(r);Thread t3 = new Thread(con);Thread t4 = new Thread(con);new Thread(pro).start();new Thread(pro).start();t3.start();t4.start();}}/*JDK1.5 中提供了多线程升级解决方案。将同步Synchronized替换成现实Lock操作。将Object中的wait,notify notifyAll,替换了Condition对象。该对象可以Lock锁 进行获取。该示例中,实现了本方只唤醒对方操作。Lock:替代了Synchronizedlock unlocknewCondition()Condition:替代了Object wait notify notifyAllawait();signal();signalAll();*/class Resource2{private String name;private int count = 4;private boolean flag = false; private Lock lock = new ReentrantLock();private Condition con_pro = lock.newCondition();private Condition con_con = lock.newCondition();public  void set(String name){lock.lock();try{while(flag){con_pro.await();}this.name = name+"--"+count++;System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);flag = true;con_con.signal();}catch(Exception e){e.printStackTrace();}finally{lock.unlock();}}//  t3   t4  public  void out(){lock.lock();try{while(!flag){<span style="white-space:pre"></span>con_con.await();}System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name);flag = false;con_pro.signal();}catch(Exception e){e.printStackTrace();}finally{lock.unlock();}}}class Producer2 extends Thread{private Resource2 res;Producer2(Resource2 res){this.res = res;}public void run(){while(true){res.set("+生产商品+");}}}class Consumer2 implements Runnable{private Resource2 res;Consumer2(Resource2 res){this.res = res;}public void run(){while(true){res.out();}}}

后记:

因为在一个包内做了多次练习,所以讲类名写成Consumer2等,仅适用于学习和练习

更多多线程精彩内容请继续关注我的博客http://blog.csdn.net/caicongyang

记录与分享,你我共成长 -from caicongyang



1 0
原创粉丝点击