package cn.com.cxsw.lesson19; import java.util.Stack; /** * @Author 陈国玉 * @version 2015-3-29 * @Description Tom(厨师) and Jerry(吃货)吃饼 1.Tom每3秒可以烧制一张饼 2.Jerry每8秒可以吃掉一张饼 * 3.盛饼的盘子只能装10张饼,当盘子装满后,Tom就休息不再做饼, 等待Jerry拿走一张饼以后再继续烧制 * 4.做100张饼、全部由Jerry吃完, 由程序反映出做饼和吃饼的过程 * * 提示:用内部类来声明Tom和Jerry线程,这样就可以使用全局的盘子变量 用Stack对象来作为盘子,放饼push、吃饼pop * 用一个从0开始的整数变量来代表第几张饼,这样每一个饼都可以相当于有个编号 */ public class EatCake { Stack<Integer> plate = new Stack<Integer>(); int num = 0; public static void main(String[] args) { EatCake ec = new EatCake(); Tom tom = ec.new Tom(); Jerry jerry = ec.new Jerry(); tom.start(); jerry.start(); } class Tom extends Thread { public void run() { while(num < 100){ if(plate.size() < 10){ try { sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } plate.push(++num); System.out.println("Tom做了第"+num+"张饼!"); } } } } class Jerry extends Thread { public void run() { int count = 0 ; while(true){ if(!plate.isEmpty()){ System.out.println("Jerry吃了第"+plate.pop()+"张饼!"); count++; try { sleep(8000); } catch (InterruptedException e) { e.printStackTrace(); } } if(count >= 100){ break; } } } } } |