当前位置: 首页 > 后端技术 > Java

多线程完成做饭和吃饭的问题

时间:2023-04-01 18:03:19 Java

问题:请利用多线程的基础知识,在两种情况下完成做饭、备菜(买菜、洗菜)、煮菜、开始吃饭的功能。1.蔬菜准备(购买和清洗):1秒,烹饪:2秒,烹饪:5秒2.蔬菜准备(购买和清洗):1秒,烹饪:8秒,烹饪:5秒。说明:只有烹调、准备、烹调都完成了,才能开始用餐。在这两种情况下,所有的动作都应该在尽可能短的时间内完成。方法:通过判断FutureTask+Callable+线程状态包com.high.currency11;importjava.util.concurrent.Callable;publicclassRiceimplementsCallable{@OverridepublicRicecall()throwsException{System.out.println("开始做饭");线程.睡眠(5000);//模拟烹饪时间System.out.println("Cookingfinished");返回新米饭();}}买菜洗菜包com.high.currency11;importjava.util.concurrent.Callable;publicclassVegetableimplementsCallable{@OverridepublicVegetablecall()throwsException{System.out.println("开始买菜洗菜");线。睡眠(1000);//模拟买菜洗菜时间System.out.println("买菜洗菜完成");返回新蔬菜();}}烹饪包com.high.currency11;importjava.util.concurrent.Callable;publicclassCookimplementsCallable{@OverridepublicCookcall()throwsException{System.out.println("开始烹饪");//模拟做饭时间Thread.sleep(8000);Cookcook=newCook();系统.out.println("烹饪完成");返回厨师;}}餐包com.high.currency11;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.FutureTask;publicclassDinner{publicstaticvoidhaveDinner()throwsInterruptedException,ExecutionException{Ricerice=newRice();FutureTaskriceTask=newFutureTask(rice);线程rThread=newThread(riceTask);rThread.start();蔬菜veg=newVegetable();FutureTaskvegTask=newFutureTask(veg);线程vThread=newThread(vegTask);vThread.start();vThread.join();Cookcook=newCook();FutureTaskcookTask=newFutureTask(cook);新线程(cookTask).start();if(!cookTask.isDone()){System.out.println("菜还没煮好,继续等");}if(!riceTask.isDone()){System.out.println("饭还没煮好,继续等");}RicericeResult=riceTask.get();库克cookResult=cookTask.get();if(null!=riceResult&&null!=cookResult){System.out.println("菜熟饭熟了,大家一起吃饭吧");}}}测试类包com.high.currency11;importjava.util.concurrent.ExecutionException;publicclassTest{publicstaticvoidmain(String[]args){longstartTime=System.currentTimeMillis();尝试{Dinner.haveDinner();}catch(InterruptedExceptione){e.printStackTrace();}catch(ExecutionExceptione){e.printStackTrace();}System.out.println("整个过程一共耗时"+(System.currentTimeMillis()-startTime)+"ms");}}测试结果开始做饭,开始买菜,洗菜,洗菜完成炒菜,煮饭。一起吃饭吧。整个过程耗时9009msgithub