多线程--生产者消费者问题
2011-09-26 11:23
232 查看
package producerConsumer; /** * <生产者,消费者> * * @author snowday88 */ public class ProducerConsumer { public static void main(String[] args) { SynStatck ss = new SynStatck(); Producer p = new Producer(ss); Consumer c = new Consumer(ss); new Thread(p).start(); new Thread(c).start(); } } // 假设生产面包 class Bread { int id; public Bread(int id) { this.id = id; } public String toString() { return "bread -" + id; } } // 放面包的筐 class SynStatck { Bread[] breads = new Bread[6]; int index = 0; public synchronized void push(Bread bread) { while (index == breads.length) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); breads[index++] = bread; System.out.println("生产了:" + bread); } public synchronized Bread pop() { while (index == 0) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); index--; System.out.println("消耗了:" + breads[index]); return breads[index]; } } // 生产者 class Producer implements Runnable { int num = 0; SynStatck synStack; public Producer(SynStatck stack) { this.synStack = stack; } public void run() { // 一次生产20个 for (int i = 0; i < 20; i++) { Bread bread = new Bread(num++); synStack.push(bread); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } } } // 消费者 class Consumer implements Runnable { SynStatck synStack; public Consumer(SynStatck stack) { this.synStack = stack; } public void run() { for (int i = 0; i < 20; i++) { synStack.pop(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
这里有一个隐藏的问题:为什么使用while而不使用if呢?
因为如果当index等于最大或者最小的时候,而且此时一个线程执行到wait,且此时被打断了,则会跳出if,而while则不会跳出,会继续检查条件是否满足。
相关文章推荐
- 多线程_生产者消费者问题代码1
- java多线程,这样的生产者消费者实现会有什么问题呢?
- 由生产者/消费者问题看JAVA多线程
- 【多线程】(九)生产者消费者问题
- 用JAVA中的多线程示例生产者和消费者问题
- 由生产者/消费者问题看JAVA多线程
- 回顾生产者/消费者问题下产生的java多线程(二)
- 多线程生产者与消费者问题的总结
- 多线程 消费者与生产者 的问题 (线程同步)
- Linux多线程实践(8) --Posix条件变量解决生产者消费者问题
- 秒杀多线程第九篇 生产者消费者问题
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- 多线程解决生产者与消费者问题
- Java多线程生产者消费者问题
- 多线程生产者与消费者问题代码模型
- Java 多线程:生产者消费者问题
- 多线程之生产者消费者问题
- java多线程解决生产者消费者问题
- 生产者消费者问题 这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者
- Linux下多生产者多消费者--多线程问题