《java多线程设计模式 第五章Producer Consumer》
来源:互联网 发布:淘宝天猫积分怎么获得 编辑:程序博客网 时间:2024/05/16 08:30
/*************************************************************************************************************************************************************************************/
Table类:
public class Table{private final String[] buffer;private int tail;//下一个put的地方private int head;//下一个take的地方private int count;//buffer内的蛋糕数量public Table(int count){this.buffer = new String[count];this.head = 0;this.tail = 0;this.count = 0;}public synchronized void put(String cake) throws InterruptedException{System.out.println(Thread.currentThread().getName()+"puts "+cake);while(count >= buffer.length){System.out.println(Thread.currentThread().getName()+"wait() begin "+cake);wait();System.out.println(Thread.currentThread().getName()+"wait() end "+cake);}buffer[tail] = cake;tail = (tail + 1) % buffer.length;count++;notifyAll();}public synchronized String take() throws InterruptedException{while(count <= 0){wait();}String cake = buffer[head];head = (head + 1)%buffer.length;count--;notifyAll();System.out.println(Thread.currentThread().getName()+"takes "+cake);return cake;}}/*************************************************************************************************************************************************************************************/
public class MakeThread extends Thread{private final Random random;private final Table table;private static int id = 0;// 蛋糕流水号public MakeThread(String name, Table table, long seed){super(name);this.table = table;this.random = new Random(seed);}public void run(){try{while (true){Thread.sleep(random.nextInt(1000));String cake = "[Cake No. " + nextId() + " by " + getName() + "]";table.put(cake);}}catch (InterruptedException e){// TODO Auto-generated catch blocke.printStackTrace();}}private static synchronized int nextId(){return id++;}}/*************************************************************************************************************************************************************************************/
import java.util.Random;public class EaterThread extends Thread{private final Random random;private final Table table;public EaterThread(String name,Table table,long seed){super(name);this.table = table;this.random = new Random(seed);}public void run(){try { while(true) { String cake = table.take(); Thread.sleep(random.nextInt(1000)); } } catch (InterruptedException e) { // TODO: handle exception }}}
/*************************************************************************************************************************************************************************************/
public class Main{/** * @param args */public static void main(String[] args){Table table = new Table(3);new MakeThread("makerthread 1 ", table, 31415).start();new MakeThread("makerthread 2 ", table, 31415).start();new MakeThread("makerthread 3 ", table, 31415).start();new EaterThread("eaterthread 1 ", table, 32568).start();new EaterThread("eaterthread 2 ", table, 32568).start();new EaterThread("eaterthread 3 ", table, 32568).start();}}
类图结构。
0 0
- 《java多线程设计模式 第五章Producer Consumer》
- Java 多线程设计模式之Producer-Consumer
- java多线程设计模式之Producer-Consumer模式(一)
- java多线程设计模式之Producer-Consumer模式(二)
- 多线程设计模式之Producer Consumer
- 多线程设计模式:Producer-Consumer生产者-消费者模式的C++
- 多线程设计模式——Producer-Consumer生产者消费者模式
- 多线程的Producer/Consumer模式
- Java多线程设计模式详解学习笔记七——Producer-Consumer
- 多线程设计模式之——Producer-Consumer Pattern
- producer-consumer Pattern ---java多线程编程模式(五)
- Java:多线程Producer-Consumer的多种实现
- Java producer-consumer(生产者/消费者模式)
- 第五章 Producer-Consumer(操作系统的生产者消费者模式) 6-3 至 6-7
- Producer Consumer 模式
- Java Thread Producer/Consumer
- producer consumer java代码
- JAVA Producer and Consumer
- 第03周:项目三:家用电子表的制作
- 扯点关于tnsping的一点事
- 关于《算法概论》的思维导图
- Bouncy Castle 算法配置
- // 插件的定义
- 《java多线程设计模式 第五章Producer Consumer》
- combinations
- C has memset(), the Berkeley UNIX C library has bzero()
- 有效获取scrollWidth clientWidth方法:
- django POST获取字典
- 数据可视化-Python之Matplotlib
- hdu 1874 (spfa)
- window编程控件的基本使用
- 【连载一】漫谈投资机构对企业的估值(一)