多线程经典例子--生产者、消费者(1)
2018-01-08 22:50
218 查看
/* 生产者,消费者。 多生产者,多消费者的问题。 if判断标记,只有一次,会导致不该运行的线程运行了。出现了数据错误的情况。 while判断标记,解决了线程获取执行权后,是否要运行! notify:只能唤醒一个线程,如果本方唤醒了本方,没有意义。而且while判断标记+notify会导致死锁。 notifyAll解决了本方线程一定会唤醒对方线程的问题。 */ class Resource { private String name; private int count = 1; private boolean flag = false; public synchronized void set(String name)// { while(flag)// if判断标记,只有一次,会导致不该运行的线程运行了。出现了数据错误的情况。 try{this.wait();}catch(InterruptedException e){}// t1 t0 this.name = name + count;//烤鸭1 烤鸭2 烤鸭3 count++;//2 3 4 System.out.println(Thread.currentThread().getName()+"...生产者..."+this.name);//生产烤鸭1 生产烤鸭2 生产烤鸭3 flag = true; notifyAll(); } public synchronized void out()// t3 { while(!flag) // if判断标记,只有一次,会导致不该运行的线程运行了。出现了数据错误的情况。 try{this.wait();}catch(InterruptedException e){} //t2 t3 System.out.println(Thread.currentThread().getName()+"...消费者........"+this.name);//消费烤鸭1 flag = false; notifyAll(); } } 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(); } } } 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(); } }
相关文章推荐
- java 多线程经典例子——生产者与消费者的问题
- 多线程经典例子--生产者、消费者(2)Lock锁和Condition
- Linux 系统应用编程——多线程经典问题(生产者-消费者)
- JAVA 多线程 消费者与生产者经典案例
- 多线程经典——生产者和消费者问题
- java多线程-生产者消费者经典问题 基于BlockingQueue
- 生产者消费者问题 这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者
- java多线程经典的生产者消费者问题
- JAVA多线程之——经典面试消费者与生产者
- java多线程之生产者消费者经典问题
- C# Thread 多线程 Monitor 锁 Producer And Consumer 生产者和消费者 经典模型
- 生产者消费者问题 这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者
- javaSE-多线程间通信-生产者消费者例子
- JAVA多线程之——经典面试消费者与生产者
- java多线程总结六:经典生产者消费者问题实现
- 多线程八 生产者消费者经典问题
- 多线程经典——生产者消费者问题(未加锁版)
- java多线程之生产者消费者经典问题
- 多线程--生产者消费者--简单例子
- java多线程之生产者消费者经典问题