第九章 Java多线程机制 05_线程同步_7_生产者消费者问题
2012-09-03 23:25
585 查看
鱼欲遇雨:每日都学习一点,持之以恒,天道酬勤!不能用电脑时,提前补上!(2012.9.3)
模拟消费者和生产者之间的关系
示例代码:(线程的核心)
模拟消费者和生产者之间的关系
示例代码:(线程的核心)
// ProducerConsumer.java //import java.util.Math; public class ProducerConsumer { public static void main(String args[]) { SyncStack ss = new SyncStack(); Producer p = new Producer(ss); Consumer c = new Consumer(ss); new Thread(p).start(); new Thread(c).start(); } } class WoTou { int id; WoTou(int id) { this.id = id; } public String toString() { return ("WoTou: " + id); } } class SyncStack { int index; WoTou[] arrWT = new WoTou[6]; public synchronized void push(WoTou wt) { while(index == 6) { try { this.wait(); //执行当前对象的线程等待;必须有锁定才能wait();wait()不在锁定 } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); //叫醒当前等待的线程 arrWT[index] = wt; index ++; } public synchronized WoTou pop() { while(index == 0) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); index --; return arrWT[index]; } } class Producer implements Runnable { SyncStack ss = null; Producer(SyncStack ss) { this.ss = ss; } public void run() { for(int i = 0; i < 20; i ++) { WoTou wt = new WoTou(i); ss.push(wt); System.out.println("生产了: " + wt); try { Thread.sleep((int)(Math.random() * 200)); } catch (InterruptedException e) { e.printStackTrace(); } } } } class Consumer implements Runnable { SyncStack ss = null; Consumer(SyncStack ss) { this.ss = ss; } public void run() { for(int i = 0; i < 20; i ++) { WoTou wt = ss.pop(); System.out.println("消费了: " + wt); try { Thread.sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) { e.printStackTrace(); } } } }
相关文章推荐
- 第九章 Java多线程机制 05_线程同步_5
- 第九章 Java多线程机制 05_线程同步_6
- 第九章 Java多线程机制 05_线程同步_1
- 第九章 Java多线程机制 05_线程同步_3
- [Java] Thread-05- 线程同步-生产者与消费者的经典问题
- 第九章 Java多线程机制 05_线程同步_ 12_总结
- [Java] Thread-05- 线程同步-生产者与消费者的经典问题
- 第九章 Java多线程机制 05_线程同步_2
- 第九章 Java多线程机制 05_线程同步_4
- Java实现 简单的多线程“生产者-消费者”问题
- java多线程(3)生产者消费者问题(二)
- java多线程实现生产者与消费者---经典问题
- Java 多线程:生产者消费者问题
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- 回顾生产者/消费者问题下产生的java多线程(一)
- java多线程中的生产者与消费者之等待唤醒机制@Version1.0
- java多线程之生产者消费者问题
- java多线程解决生产者消费者问题
- JAVA学习第二十七课(多线程(六))- 多生产者多消费者问题(JDK1.5新特性)
- java多线程之生产者消费者经典问题