Java生产消费者实例-->升级版
2013-07-07 12:45
113 查看
import java.util.concurrent.locks.*; /* Java多线程实例:生产消费模式(就是生产一个消费一个) 该实例用jdk1.5 中提供的新方法: 用Lock替代了sychronized 用Condition接口中的方法替换了Object中操作线程的方法(wait,notify,notifyAll) Author:renpingqing Date:2013年7月7日 12:22:42 思路: 1、创建一个资源类,实例域,一个生成方法,一个消费方法 2、创建一个类并实现Runnable接口调用资源类的生成方法 3、创建一个类并实现Runnable接口调用资源类的消费方法 (1)生产方法和消费方法要同步,因为我们要的效果是生产一个,消费一个 4、在主函数里创建一个资源,多个生产者,多个消费者,并启动线程 */ class Resource { private String name; //产品名称 // private int num = 1; //产品编号 private int num = 1; //产品编号 private boolean flag = false; //产品标识,false表示还没有生产 private Lock lock = new ReentrantLock(); //创建一个锁 private Condition condition_pro = lock.newCondition(); private Condition condition_con = lock.newCondition(); //生产方法 public void producer(String name) throws InterruptedException { lock.lock(); //锁定 try { while(flag) { condition_pro.await(); //生产者等待 } this.name = name + "产品编号:" + num++; System.out.println(Thread.currentThread().getName() + "--生产--" + "产品名称:" + this.name); flag = true; condition_con.signal(); //唤醒消费者 } finally { lock.unlock(); //解锁 } } //消费方法 public synchronized void consumer() throws InterruptedException { lock.lock(); try { while(!flag) { condition_con.await(); } System.out.println(Thread.currentThread().getName() + "+++++消费+++++" + name); flag = false; condition_pro.signal(); } finally { lock.unlock(); } } } //生产类 class Producer implements Runnable { private Resource res; //构造函数 public Producer(Resource res) { this.res = res; } //覆盖run方法 public void run() { while(true) { try { res.producer("老坛酸菜面"); } catch(InterruptedException e) { } } } } //消费类 class Consumer implements Runnable { private Resource res; public Consumer(Resource res) { this.res = res; } public void run() { while(true) { try { res.consumer(); } catch(InterruptedException e) { } } } } //主函数 class ProducerConsumer2 { public static void main(String[] args) { //创建资源 Resource r = new Resource(); //创建生产者 Producer p1 = new Producer(r); Producer p2 = new Producer(r); Producer p3 = new Producer(r); Producer p4 = new Producer(r); //创建消费者 Consumer c1 = new Consumer(r); Consumer c2 = new Consumer(r); Consumer c3 = new Consumer(r); //创建生产者线程 Thread t1 = new Thread(p1); Thread t2 = new Thread(p2); Thread t3 = new Thread(p3); Thread t4 = new Thread(p4); //创建消费者线程 Thread t10 = new Thread(c1); Thread t11 = new Thread(c2); Thread t12 = new Thread(c3); //开启线程 t1.start(); t2.start(); t3.start(); t4.start(); t10.start(); t11.start(); t12.start(); } }
相关文章推荐
- Java多线程实例->生产消费模式
- 【我的Java笔记】多线程_等待唤醒机制(生产消费者模式)
- Java---20---多线程:生产者和消费者2(JDK1.5升级版)
- Java多线程之生产者消费者实例
- Java BlockingQueue生产者消费者实例
- Laszal Mail 授权文件的生成 -> Java 帮助类技术实例
- <JAVA学习笔记8>——生产者、消费者案例(2)
- Java中线程同步—————生产者与消费者实例
- java中用一个MyNumber类充当“生产者—消费者”模式的缓冲池实例
- Java移位运算符详解实例——左移位运算符>>、带符号的右移位运算符>>
- java多线程--“升级版”生产者消费者
- Java多线程系列--“基础篇”11之 生产消费者问题
- java中addAll(Collection<? extends E> col)方法实例
- Java生产1-100的随机数简单实例(分享)
- 基于java多线程来实现生产者和消费者的实例
- Java多线程系列--“基础篇”11之 生产消费者问题 (r)
- IDEA编译报无法确定 <T>T 的类型参数 ;对于上限为int,java.lang.Object 的类型变量 T,不存在唯一最大实例,解决方案
- Java生产消费者模式之项目实践
- Java学习日记101:生产消费者模式
- JAVA-16.2-生产消费者模式