【重点】JDK5新特性lock和condition(多生产者多消费者:可以用来区分本方线程和对方线程)
2013-10-20 22:48
429 查看
package com.xiaozhi.procon2; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /* * 多生产者多消费者 * lock代替sychronized * condition里面的await和signal代替Object的wait和notify * condition可以区分本方线程和对方线程 */ public class Test { public static void main(String[] args) { Resource resource=new Resource(); Producer producer1=new Producer(resource); Producer producer2=new Producer(resource); Consumer consumer1=new Consumer(resource); Consumer consumer2=new Consumer(resource); Thread thread1=new Thread(producer1); Thread thread2=new Thread(producer2); Thread thread3=new Thread(consumer1); Thread thread4=new Thread(consumer2); thread1.start(); thread2.start(); thread3.start(); thread4.start(); } } class Resource{ private int num; private boolean flag=false; private Lock lock=new ReentrantLock(); private Condition condition_pro=lock.newCondition(); private Condition condition_con=lock.newCondition(); public void input() { lock.lock(); try { while(flag) condition_pro.await(); num++; System.out.println("商品生产-----------------"+num); flag=true; condition_con.signal(); } catch (InterruptedException e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void output() { lock.lock(); try { while(!flag) condition_con.await(); System.out.println("商品消费--------------------------"+num); flag=false; condition_pro.signal(); } catch (InterruptedException e) { e.printStackTrace(); }finally{ lock.unlock(); } } } class Producer implements Runnable{ private Resource resource; public Producer(Resource resource) { super(); this.resource = resource; } @Override public void run() { while(true) resource.input(); } } class Consumer implements Runnable{ private Resource resource; public Consumer(Resource resource) { super(); this.resource = resource; } @Override public void run() { while(true) resource.output(); } }
相关文章推荐
- 多线程(线程间通信-多生产者多消费者问题-JDK1.5新特性-Lock
- 线程间通信、等待唤醒机制、生产者消费者问题(Lock,Condition)、停止线程和守护线程、线程优先级
- java 多线程学习之多生产者多消费者产生的线程安全问题分析与解决:Lock和Condition
- Java 多线程(三)线程间的通信jdk1.5中Lock,Condition---生产者消费者为例
- java线程协作,经典生产者/消费者模式(二、Lock和Condition)
- 线程经典问题 生产者消费者 jdk 1.5后解决办法 lock 和condition
- 29-多线程(线程间通信-多生产者多消费者问题-JDK1.5新特性-Condition).1 2 31-多线程(线程间通信-多生产者多消费者问题-JDK1.5解决办法-范例). 1 2
- Java 多线程(三)线程间的通信jdk1.5中Lock,Condition---生产者消费者为例
- 一个可以重用的线程安全生产者消费者队列类
- 生产者消费者模型(使用lock.condition进行分组唤醒)
- java多线程学习笔记(七) ——消费者与生产者(LOCK、Condition接口)
- Lock、Condition实现简单的生产者消费者模式示例
- 使用 Lock 与Condition 实现生产者消费者
- (三)juc高级特性——虚假唤醒 / Condition / 按序交替 / ReadWriteLock / 线程八锁
- 黑马程序员——多个生产者,多个消费者 signalAll() JDK1.5线程新特性
- java中重入ReentrantLock(Condition监视器)锁生产者消费者
- 线程间通信-多生产者多消费者(Lock版本)
- Java多线程实现生产者消费者程序(Wait,Notify实现和Lock,Condition实现)
- Lock_Condition生产者消费者模式之官方版
- 使用ReentrantLock和Condition实现生产者消费者模型