Java多线程 多个生产者和多个消费者实现同步 jdk1.5
来源:互联网 发布:windows小技巧 编辑:程序博客网 时间:2024/05/19 01:14
jdk1.5用Lock和Condition 代替 jdk1.4 synchronized、wait、notify
package test;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class Person {}/* 程序说明:2个生产者,2个消费者, 生产一个商品,消费一个商品(商品有标号) jdk1.5用Lock和Condition 代替 jdk1.4 synchronized、wait、notify */class Resource {private String name = "";private int count = 1;private boolean flag = false;private Lock lock = new ReentrantLock();private Condition condition = lock.newCondition();public void produce(String name) {lock.lock();try {while (flag)// 注意判断标记用while,每次线程唤醒都要先判断标记condition.await();this.name = name + "--" + count++;System.out.println(Thread.currentThread().getName()+ ": 生产者....." + this.name);flag = true;condition.signalAll();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {lock.unlock(); // 如果程序出现异常,处理完异常后必须释放锁,所以要用finally}}public synchronized void consume() {lock.lock();try {while (!flag)// 注意判断标记用while,每次线程唤醒都要先判断标记condition.await();System.out.println(Thread.currentThread().getName()+ ": 消费者.........." + this.name);flag = false;condition.signalAll();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {lock.unlock();}}}class Producer implements Runnable {private Resource res;Producer(Resource res) {this.res = res;}public void run() {while (true) {res.produce("商品");}}}class Consumer implements Runnable {private Resource res;Consumer(Resource res) {this.res = res;}public void run() {while (true) {res.consume();}}}public class Test {public static void main(String[] args) {Resource res = new Resource();Producer producer = new Producer(res);Consumer consumer = new Consumer(res);Thread t1 = new Thread(producer);Thread t2 = new Thread(producer);Thread t3 = new Thread(consumer);Thread t4 = new Thread(consumer);t1.start();t2.start();t3.start();t4.start();}}
用jdk1.5的新特性 解决当前问题
import java.util.concurrent.locks.*;class ProducerConsumerDemo2 {public static void main(String[] args) {Resource r = new Resource();Producer pro = new Producer(r);Consumer con = new Consumer(r);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();}}/*JDK1.5 中提供了多线程升级解决方案。将同步Synchronized替换成现实Lock操作。将Object中的wait,notify notifyAll,替换了Condition对象。该对象可以Lock锁 进行获取。该示例中,实现了本方只唤醒对方操作。Lock:替代了Synchronizedlock unlocknewCondition()Condition:替代了Object wait notify notifyAllawait();signal();signalAll();*/class Resource{private String name;private int count = 1;private boolean flag = false;// t1 t2private Lock lock = new ReentrantLock();private Condition condition_pro = lock.newCondition();private Condition condition_con = lock.newCondition();public void set(String name)throws InterruptedException{lock.lock();try{while(flag)condition_pro.await();//t1,t2this.name = name+"--"+count++;System.out.println(Thread.currentThread().getName()+"...生产者.."+this.name);flag = true;condition_con.signal();}finally{lock.unlock();//释放锁的动作一定要执行。}}// t3 t4 public void out()throws InterruptedException{lock.lock();try{while(!flag)condition_con.await();System.out.println(Thread.currentThread().getName()+"...消费者........."+this.name);flag = false;condition_pro.signal();}finally{lock.unlock();}}}class Producer implements Runnable{private Resource res;Producer(Resource res){this.res = res;}public void run(){while(true){try{res.set("+商品+");}catch (InterruptedException e){}}}}class Consumer implements Runnable{private Resource res;Consumer(Resource res){this.res = res;}public void run(){while(true){try{res.out();}catch (InterruptedException e){}}}}
0 0
- Java多线程 多个生产者和多个消费者实现同步 jdk1.5
- Java多线程 多个生产者和多个消费者实现同步 jdk1.4
- 生产者消费者模型(多个生产者和多个消费者)JDK1.5之前实现版
- 生产者消费者模型(多个生产者和多个消费者)JDK1.5 (Lock&Condition)实现版
- java多线程 一个生产者和多个消费者
- Java多线程 9 多个生产者和消费者
- day11多线程的安全问题-同步(技术锁)-多个生产者和消费者
- java 多线程,生产者消费者实现。适合多个生产者消费者线程;打印线程编号便于查看正确性
- java多线程之--多的生产者与多个消费者
- 黑马程序员——多个生产者,多个消费者 signalAll() JDK1.5线程新特性
- Qt线程同步之一个生产者多个消费者
- java实现 生产者和消费者问题 多线程同步示例
- 多线程通信 --- 多个生产者多个消费者
- java多线程实现生产者/消费者同步
- 生产者和消费者多线程同步,C++实现
- java 用多线程实现多生产者和多消费者模式
- 多线程-多生产者多消费者问题JDK1.5新特性
- 多个生产者-一个消费者-进程间同步的例子 - OutputDebugString的实现
- 继承
- 关于 error while loading shared libraries: libXXX.so.1.2.3: cannot open shared object file: No such fi
- hdu4283 you are the one 区间DP
- 一个整数二进制中1的个数
- 静态方法
- Java多线程 多个生产者和多个消费者实现同步 jdk1.5
- 历史表创建
- 面向对象
- 12.对字符串中的数值进行操作
- 使用函数RV_ORDER_FLOW_INFORMATION获取SO凭证流
- 随机小游戏
- 数值的整数次方
- List和Set区别深度解析
- (六十七)Xcode导入XMPPFramework框架