java多线程之多生产者与多消费者案例之Lock和Condition实现方式
来源:互联网 发布:自组织神经网络算法 编辑:程序博客网 时间:2024/05/16 08:01
jdk1.5以后将同步和锁封装成了对象。
并将操作锁的隐式方式定义到了该对象中,
将隐式动作变成了显示动作。
Lock接口: 出现替代了同步代码块或者同步函数。将同步的隐式锁操作变成现实锁操作。
同时更为灵活。可以一个锁上加上多组监视器。
lock():获取锁。
unlock():释放锁,通常需要定义finally代码块中。
Condition接口:出现替代了Object中的wait notify notifyAll方法。
将这些监视器方法单独进行了封装,变成Condition监视器对象。
可以任意锁进行组合。
await();
signal();
并将操作锁的隐式方式定义到了该对象中,
将隐式动作变成了显示动作。
Lock接口: 出现替代了同步代码块或者同步函数。将同步的隐式锁操作变成现实锁操作。
同时更为灵活。可以一个锁上加上多组监视器。
lock():获取锁。
unlock():释放锁,通常需要定义finally代码块中。
Condition接口:出现替代了Object中的wait notify notifyAll方法。
将这些监视器方法单独进行了封装,变成Condition监视器对象。
可以任意锁进行组合。
await();
signal();
signalAll();
代码如下:
import java.util.concurrent.locks.*;class Resource{private String name;private int count = 1;private boolean flag = false;//创建一个锁对象。Lock lock = new ReentrantLock();//通过已有的锁获取该锁上的监视器对象。//Condition con = lock.newCondition();//通过已有的锁获取两组监视器,一组监视生产者,一组监视消费者。Condition producer_con = lock.newCondition();Condition consumer_con = lock.newCondition();public void set(String name)// t0 t1{lock.lock();try{while(flag)//try{lock.wait();}catch(InterruptedException e){}// t1 t0try{producer_con.await();}catch(InterruptedException e){}// t1 t0this.name = name + count;//烤鸭1 烤鸭2 烤鸭3count++;//2 3 4System.out.println(Thread.currentThread().getName()+"...生产者5.0..."+this.name);//生产烤鸭1 生产烤鸭2 生产烤鸭3flag = true;//notifyAll();//con.signalAll();consumer_con.signal();}finally{lock.unlock();}}public void out()// t2 t3{lock.lock();try{while(!flag)//try{this.wait();}catch(InterruptedException e){}//t2 t3try{consumer_con.await();}catch(InterruptedException e){}//t2 t3System.out.println(Thread.currentThread().getName()+"...消费者.5.0......."+this.name);//消费烤鸭1flag = false;//notifyAll();//con.signalAll();producer_con.signal();}finally{lock.unlock();}}}class Producer implements Runnable{private Resource r;Producer(Resource r){this.r = r;}public void run(){while(true){r.set("烤鸭");}}}class Consumer implements Runnable{private Resource r;Consumer(Resource r){this.r = r;}public void run(){while(true){r.out();System.out.println("-------------------------------------------------");}}}class ProducerConsumerDemo2{public static void main(String[] args) {Resource r = new Resource();Producer pro = new Producer(r);Consumer con = new Consumer(r);Thread t0 = new Thread(pro);Thread t1 = new Thread(pro);Thread t2 = new Thread(con);Thread t3 = new Thread(con);t0.start();t1.start();t2.start();t3.start();}}
运行结果:
整理自示例代码
阅读全文
0 0
- java多线程之多生产者与多消费者案例之Lock和Condition实现方式
- java 多线程学习之多生产者多消费者产生的线程安全问题分析与解决:Lock和Condition
- 使用 Lock 与Condition 实现生产者消费者
- java多线程之生产者与消费者案例
- java多线程之生产者和消费者案例
- 使用jdk1.5的多线程 lock condition 实现方式实现 生产者消费者问题
- 生产者消费者模型(多个生产者和多个消费者)JDK1.5 (Lock&Condition)实现版
- java多线程学习笔记(七) ——消费者与生产者(LOCK、Condition接口)
- 使用Lock和Condition实现生产者和消费者
- 使用Lock和Condition实现生产者消费者模型
- Lock和Condition实现阻塞队列与生产者消费者模式的实现
- Java多线程与并发(五)之生产者与消费者案例
- 之生产者与消费者问题,Lock和Condition,线程面试题
- 使用lock&condition实现生产者消费者
- 使用Lock的Condition实现生产者消费者
- 多线程之多消费者与生产者
- Java多线程操作案例-生产者和消费者实现
- java多线程之生产者和消费者经典问题案例
- 微信支付配置
- 【Java并发】- ReentrantLock,重入锁
- 欢迎使用CSDN-markdown编辑器
- finereport note 帆软笔记
- scatter file 全功能介绍
- java多线程之多生产者与多消费者案例之Lock和Condition实现方式
- jQGrid的使用记录.
- 1058. 选择题(20) PAT
- js二维数组定义和初始化的三种方法
- 【git】fatal: unable to access 'https://github.com/top-think/framework.git/'
- 排序问题
- Android对图片进行高斯模糊
- 鱼眼图片转化位全景图片的软件以及鱼眼矫正方法
- php删除多维数组里面的值