Java线程之单生产者单消费者示例(二)
来源:互联网 发布:开票软件怎么重装 编辑:程序博客网 时间:2024/04/28 02:48
在Java1.5以前的版本中,因为监视器是来自于Object,为了线程的互斥访问,用的synchronized方法或者模块
在synchronized中,“锁”的操作是隐式的,而且每一个锁里只能有一组wait-notify或是wait-notifyAll方法,这样的弊端在于
等待和唤醒的缓冲线程里不仅包括了生产者也包括了消费者,这样就不能指定唤醒进程,要么唤醒了全部进程,影响了效率,要么休眠了所有进程,发生死锁
所以这个只能适用于单生产者单消费者的情况
eg:
class Resource{ String name; private int count = 1; String id; private boolean flag = false;//初始默认没有产品 public synchronized void producer(String name) { if(flag) try{wait();} catch (InterruptedException ex){} this.name = name; id = name+count++; System.out.println(Thread.currentThread().getName()+"--->生产:"+id); flag = true; notify(); } public synchronized void consumer() { if(!flag) try{wait();} catch (InterruptedException ex){} System.out.println(Thread.currentThread().getName()+"--------->消费"+id); flag = false; notify(); }}class Producer implements Runnable{ Resource r; Producer(Resource r) { this.r = r; } public void run() { while(true) { r.producer("包子"); } }}class Consumer implements Runnable{ Resource r; Consumer(Resource r) { this.r = r; } public void run() { while (true) { r.consumer(); } }}class ThreadPC { public static void main(String[] args) { //创建资源 Resource r = new Resource(); //创建线程任务 Producer p = new Producer(r); Consumer c = new Consumer(r); //创建线程 Thread tp = new Thread(p); Thread tc = new Thread(c); //开启线程 tp.start(); tc.start(); }}
1 0
- Java线程之单生产者单消费者示例(二)
- java解决单缓冲生产者消费者问题示例
- 单生产者,单消费者
- 单生产者 单消费者
- 线程间通讯----生产者消费者(单线程)
- C++ 单生产者多消费者多线程示例
- 生产者 消费者 --- 多线程 到 单线程 控制
- 单生产者-单消费者模型
- 并发无锁队列学习之二【单生产者单消费者】
- 单生产者 多消费者
- Java 线程之生产者消费者
- java多生产者,单消费者实现
- Java线程同步:生产者-消费者 模型(代码示例)
- 无锁队列之单生产者单消费者
- 生产者消费者示例二
- java线程(生产者/消费者)
- Java线程之线程协作(生产者/消费者问题)
- Java回炉之多线程(二)生产者与消费者
- Parcelable
- hdu 2872 Another Snake 爆搜 判断射线与线段相交
- 模式源于生活:代理模式---中介租房
- HDU 4342 - History repeat itself
- sourceinsight中使用正则表达式
- Java线程之单生产者单消费者示例(二)
- Android—TextView的XML属性和方法
- AndroidBucket Android开发常用整理
- ListView中Button的点击事件冲突
- jQuery1.72 内存泄露追踪(附解决方案)
- background
- 剑指offer(23):栈的压入、弹出序列
- Andrew Ng机器学习笔记2——梯度下降法and最小二乘拟合
- 开发一定要买台苹果电脑,最好是苹果笔记本