java jdk5.0生产者消费者升级版
来源:互联网 发布:高铁管家抢票软件 编辑:程序博客网 时间:2024/06/11 13:38
import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class Test_Producer_Consumer {public static void main(String[] args) {Resource res = new Resource();Producer pro = new Producer(res);Consumer con = new Consumer(res);Thread t1 = new Thread(pro);Thread t2 = new Thread(pro);Thread t3 = new Thread(con);Thread t4 = new Thread(con);t1.start();t2.start();t3.start();t4.start();}}/* * class Resource { private String name; private int count = 1; private boolean * flag = false; * * public synchronized void set(String name) { while(flag) { try { this.wait(); * } catch (InterruptedException e) { e.printStackTrace(); } } this.name = name * + "..." + count++; System.out.println(Thread.currentThread().getName() + * "...生产了..." + name); flag = true; this.notifyAll(); } * * public synchronized void out() { while(!flag) { try { this.wait(); } catch * (InterruptedException e) { e.printStackTrace(); } } * System.out.println(Thread.currentThread().getName() + "...消费了.............." * + name); flag = false; this.notifyAll(); } } */class Resource {private String name;private int count = 1;private boolean flag = false;/* * JDK5.0对线程同步问题进行了升级 */private Lock lock = new ReentrantLock();private Condition condition_pro = lock.newCondition();private Condition condition_con = lock.newCondition();public void set(String name) {lock.lock();try {while (flag) {condition_pro.await();}this.name = name + "..." + count++;System.out.println(Thread.currentThread().getName() + "...生产了..."+ name);flag = true;condition_con.signalAll();} catch (InterruptedException e) {e.printStackTrace();} finally { // 不管你await有没有出错,你的锁一定会要释放lock.unlock();}}public void out() {lock.lock();try {while (!flag) {condition_con.await();}System.out.println(Thread.currentThread().getName()+ "...消费了.............." + name);flag = false;condition_pro.signalAll();} catch (InterruptedException e) {e.printStackTrace();} finally { // 不管你await有没有出错,你的锁一定会要释放lock.unlock();}}}class Producer implements Runnable {private Resource res;Producer(Resource res) {this.res = res;}@Overridepublic void run() {while (true) {res.set("商品");}}}class Consumer implements Runnable {private Resource res;Consumer(Resource res) {this.res = res;}@Overridepublic void run() {while (true) {res.out();}}}
JDK5.0对多线程同步进行了升级
将隐式的synchronized替换成了显式的Lock对象
将Object对象中的wait、notify、notifyAll,替换成了Condition对象
因为等待和唤醒是针对锁对象的,所以Condition对象的实例可以通过Lock对象的newCondition()方法拿到
并且升级之后最大的好处是一个锁对象可以对应多个Condition对象,这样在生产者消费者的例子中就可以解决
唤醒的时候把本方唤醒的问题,通过不同的Condition对象,可以选择让哪些Condition对象等待,哪些Condition对象唤醒
- java jdk5.0生产者消费者升级版
- JAVA 线程间通信 -生产者消费者JDK5.0升级版
- JAVA 线程间通信 -生产者消费者JDK5.0升级版
- 【java多线程】【生产者与消费者】【JDK5.0升级版】
- Java基础学习__多线程(线程间通信--生产者消费者JDK5.0升级版)
- java多线程--“升级版”生产者消费者
- java基础——生产者与消费者问题(和JDK5.0中的不同)
- 多线程生产者与消费者JDK5.0版本新特性
- Java生产者消费者简易版
- Java---20---多线程:生产者和消费者2(JDK1.5升级版)
- Java多线程之并发协作生产者消费者设计模式JDK1.5.0+升级优化版
- 生产者-消费者的经典案例升级版(jdk1.5版)
- 升级版的生产者和消费者 JDK1.5
- 线程间通讯------生产者与消费者(JDK升级版)
- 操作系统生产者与消费者程序(JAVA版)
- 生产者、消费者线程模型 java版
- 生产者和消费者问题+java版
- Java基础----生产者消费者问题改进版
- mssql server 2008 r2 sp2修复问题列表
- VC调用大漠插件实例,单线程,多线程,哦
- PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解
- /proc
- #ifndef、#def、#endif说明
- java jdk5.0生产者消费者升级版
- 使用PowerDesigner设计建造MySQL数据库
- QT容器类
- 【Android】报表、线图、饼图、柱状图 (工具整理)
- PowerDesigner 15设置mysql主键自动增长及基数
- LA 3971 Assemble / 二分
- The import javax.servlet cannot be resolved解决方法
- (*(volatile unsigned long *)详解
- boost-工具类1