LinkedBlockingQueue示例
来源:互联网 发布:中国电信网络承载策略 编辑:程序博客网 时间:2024/06/07 17:34
package mypack;import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.TimeUnit;/* * 一台机器有三个任务:一个是制作吐司、 * 一个是给吐司涂上黄油、一个是给涂有黄油的吐司涂上果酱 * */class Toast{public enum Status{DRY,BUTTERED,JAMMED};private Status status=Status.DRY;private int idn;public Toast(int id){idn=id;}public void buttered() {status=Status.BUTTERED;}public void jam(){status=Status.JAMMED;}public int getId(){ return idn;}public String toString(){return "Toast:"+idn+" Status: "+status;}}class ToastQueue extends LinkedBlockingQueue<Toast>{}class Toaster implements Runnable{private ToastQueue dryQueue;private int count=0;private Random rand=new Random(47);public Toaster(ToastQueue queue){dryQueue=queue;}@Overridepublic void run() {// TODO Auto-generated method stubtry{while(!Thread.interrupted()){TimeUnit.MILLISECONDS.sleep(200+rand.nextInt(300));Toast toast = new Toast(++count);System.out.println(toast);dryQueue.put(toast);}}catch(InterruptedException e){System.out.println("Toster Interrupt");}System.out.println("Toaster off");}}class Bufferer implements Runnable{private ToastQueue dryQueue;private ToastQueue bufferedQueue;public Bufferer(ToastQueue dryQueue,ToastQueue bufferedQueue){this.dryQueue=dryQueue;this.bufferedQueue=bufferedQueue;}@Overridepublic void run() {// TODO Auto-generated method stubtry{ while(!Thread.interrupted()){Toast toast = dryQueue.take();toast.buttered();bufferedQueue.put(toast);System.out.println(toast); }}catch(InterruptedException e){System.out.println("Bufferer interrupt");}System.out.println("Bufferer off");}}class Jammer implements Runnable{private ToastQueue bufferedQueue;private ToastQueue jammedQueue;public Jammer(ToastQueue bufferedQueue,ToastQueue jammedQueue){this.bufferedQueue=bufferedQueue;this.jammedQueue=jammedQueue;}@Overridepublic void run() {// TODO Auto-generated method stubtry{while(!Thread.interrupted()){Toast toast = bufferedQueue.take();toast.jam();System.out.println(toast);jammedQueue.put(toast);}}catch(InterruptedException e){System.out.println("Jammer Interrupt");}System.out.println("Jammer Off");}}class Eat implements Runnable{private ToastQueue eatQueue;private int count=0;public Eat(ToastQueue eatQueue){this.eatQueue=eatQueue;}@Overridepublic void run() {// TODO Auto-generated method stubtry{while(!Thread.interrupted()){Toast toast = eatQueue.take();if(++count!=toast.getId()){System.out.println("Error");System.exit(0);}}}catch(InterruptedException e){System.out.println("eat interrupt");} System.out.println("eat off");}}public class EatToast {public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stub ToastQueue dryQueue=new ToastQueue(); ToastQueue bufferedQueue=new ToastQueue(); ToastQueue jammedQueue=new ToastQueue(); ExecutorService exec = Executors.newCachedThreadPool(); exec.execute(new Toaster(dryQueue)); exec.execute(new Bufferer(dryQueue,bufferedQueue)); exec.execute(new Jammer(bufferedQueue,jammedQueue)); exec.execute(new Eat(jammedQueue)); TimeUnit.SECONDS.sleep(5); exec.shutdownNow();}}
0 0
- LinkedBlockingQueue示例
- LinkedBlockingQueue
- LinkedBlockingQueue
- LinkedBlockingQueue
- LinkedBlockingQueue
- LinkedBlockingQueue
- LinkedBlockingQueue
- LinkedBlockingQueue
- LinkedBlockingQueue
- LinkedBlockingQueue
- LinkedBlockingQueue
- LinkedBlockingQueue
- LinkedBlockingQueue
- LinkedBlockingQueue
- LinkedBlockingQueue
- linkedblockingqueue
- LinkedBlockingQueue
- ConcurrentLinkedQueue并发队列和LinkedBlockingQueue阻塞队列的详细用法和示例
- 创建自定义类的对象数组
- 递归求二项式系数值
- mybatis generator
- 分布式锁
- 数据库表的行和列倒置
- LinkedBlockingQueue示例
- POJ 1275 Cashier Employment(差分约束)
- c++ 数据结构 用递归方法解决迷宫问题
- HDU 5993 ArcSoft's Office Rearrangement 简单模拟
- 【13】Java基础:java中的静态代码块,静态变量,静态方法
- 双系统环境的搭建
- Androidstudio中编译版本和java版本冲突问题
- sqlserver多线程查询与更新
- ReactiveCocoa 学习笔记 - 使用篇