模拟烧茶的进程
模拟烧茶的过程
模拟烧茶的过程: 1)烧水 2)需要茶叶的时候发现没茶叶,叫eric去买(没有茶叶,需要买) 3)需要杯子的时候发现没杯子,叫meten去买(没有杯子,需要买) 4)放茶叶 3)倒水 public class ExecDemo2 { public static void main(String[] args){ Tea tea = new Tea(); tea.setTea(false); Teacup teacup = new Teacup(); teacup.setTeacup(false); Thread burntTea = new BurntTea(tea,teacup,"勾力"); burntTea.start(); } } /** * 共享数据Tea * @author Administrator * */ class Tea{ private boolean isTea; public boolean isTea() { return isTea; } public void setTea(boolean isTea) { this.isTea = isTea; } } /** * 共享数据Teacup * @author Administrator * */ class Teacup{ private boolean isTeacup; public boolean isTeacup() { return isTeacup; } public void setTeacup(boolean isTeacup) { this.isTeacup = isTeacup; } } /** * 管理线程 BurntTea * @author Administrator * */ class BurntTea extends Thread { private Tea tea; private Teacup teacup; public BurntTea(Tea tea, Teacup teacup,String name){ super(name); this.tea = tea; this.teacup = teacup; } public void run(){ String name = Thread.currentThread().getName(); System.out.println(name + "准备烧茶啦"); System.out.println(name + "烧水啦"); while(!this.tea.isTea()){ System.out.println(name + "发现没茶叶啦"); Runnable buyTea = new BuyTea(tea); Thread buyTeaThread = new Thread(buyTea,"eric"); buyTeaThread.start(); try { buyTeaThread.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(this.tea.isTea()){ break; } } while(!this.teacup.isTeacup()){ System.out.println(name + "发现没有茶杯啦"); Thread buyTeacup = new BuyTeacup(teacup,"meten"); buyTeacup.start(); try { buyTeacup.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(this.teacup.isTeacup()){ break; } } System.out.println(name + "放茶叶"); System.out.println(name + "放水"); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("茶烧好啦"); } } /** * 买茶杯线程 * @author Administrator * */ class BuyTeacup extends Thread{ private Teacup teacup; public BuyTeacup(Teacup teacup ,String name){ super(name); this.teacup = teacup; } public void run(){ String name = Thread.currentThread().getName(); System.out.println(name + "去买茶杯了"); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(name + "买茶杯回来啦"); int a = (int)(Math.random() * 1000) % 3; switch(a){ case 1: System.out.println("买茶杯成功"); this.teacup.setTeacup(true); break; case 2: System.out.println("买茶杯不成功"); this.teacup.setTeacup(false); break; case 3: System.out.println("买茶杯成功"); this.teacup.setTeacup(true); break; } } } /** * 买茶叶线程 * @author Administrator * */ class BuyTea implements Runnable{ private Tea tea; public BuyTea(Tea tea){ this.tea = tea; } public void run(){ String name = Thread.currentThread().getName(); System.out.println(name + "去买茶叶了"); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(name + "买茶叶回来啦"); int a = (int)(Math.random() * 1000) % 4; switch(a){ case 1: System.out.println("买茶叶成功"); this.tea.setTea(true); break; case 2 : System.out.println("买茶叶不成功"); this.tea.setTea(false); break; case 3: System.out.println("买茶叶成功"); this.tea.setTea(true); break; case 4: System.out.println("买茶叶不成功"); this.tea.setTea(false); break; } } }