java多线程之生产者与消费者案例
来源:互联网 发布:禅道的数据库配置 编辑:程序博客网 时间:2024/05/17 04:31
多生产者,多消费者的问题。
if判断标记,只有一次,会导致不该运行的线程运行了。出现了数据错误的情况。
while判断标记,解决了线程获取执行权后,是否要运行!
notify:只能唤醒一个线程,如果本方唤醒了本方,没有意义。而且while判断标记+notify会导致死锁。
if判断标记,只有一次,会导致不该运行的线程运行了。出现了数据错误的情况。
while判断标记,解决了线程获取执行权后,是否要运行!
notify:只能唤醒一个线程,如果本方唤醒了本方,没有意义。而且while判断标记+notify会导致死锁。
notifyAll解决了本方线程一定会唤醒对方线程的问题。
代码如下:
/** * 操作资源对象 * @author fanyuan * */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){}// t1 t0this.name = name + count;//烤鸭1 烤鸭2 烤鸭3count++;//2 3 4System.out.println(Thread.currentThread().getName()+"...生产者..."+this.name);//生产烤鸭1 生产烤鸭2 生产烤鸭3flag = true;notifyAll();}public synchronized void out()// t3{while(!flag)try{this.wait();}catch(InterruptedException e){}//t2 t3System.out.println(Thread.currentThread().getName()+"...消费者........"+this.name);//消费烤鸭1flag = false;notifyAll();}}/** * 生产者 * @author fanyuan * */class Producer implements Runnable{private Resource r;Producer(Resource r){this.r = r;}public void run(){while(true){r.set("烤鸭");}}}/** * 消费者 * @author fanyuan * */class Consumer implements Runnable{private Resource r;Consumer(Resource r){this.r = r;}public void run(){while(true){r.out();System.out.println();}}}class ProducerConsumerDemo{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多线程之生产者与消费者案例
- Java多线程与并发(五)之生产者与消费者案例
- java多线程之生产者和消费者案例
- 多线程案例:生产者与消费者
- JAVA 多线程之生产者与消费者
- Java多线程之生产者与消费者
- Java多线程之生产者与消费者
- Java多线程之 生产者与消费者
- java多线程同步案例之--生产者消费者模型
- java多线程之生产者和消费者经典问题案例
- java多线程之多生产者与多消费者案例之Lock和Condition实现方式
- 多线程操作案例---生产者与消费者
- 多线程——消费者与生产者案例
- java多线程 生产者与消费者
- 【Java多线程】-生产者与消费者
- JAVA - 多线程 - 生产者与消费者
- Java多线程-生产者与消费者
- Java多线程经典案例-生产者消费者
- 初2019级编程社团期末考试(20170610)-第一题解题报告
- linux下docker安装与使用 1
- 根据IP地址获取用户的MAC地址
- java数据库工具类
- python学习之if __name__ == 'main': 的作用和原理
- java多线程之生产者与消费者案例
- 九度1026:又一版 A+B
- Android使用FFmpeg 解码H264并播放(二)
- org.hibernate.ObjectNotFoundException: No row with the given identifier exists
- Smalidea+IntelliJ IDEA/Android Studio动态调试安卓app教程
- Android 自定义ViewGroup 实战篇 -> 实现FlowLayout
- python程序内存泄漏调试记录
- eclipse中一次部署多个项目
- LTP(Linux Test Project) for Android的编译