本文主要是介绍线程实现交替任务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
涂完蜡才能抛光,抛光完又可以涂蜡
class Car{private boolean waxOn=false; /** * 涂蜡 */ public synchronized void waxed(){waxOn=true; notify(); }/** * 抛光 */ public synchronized void buffed(){waxOn=false; notifyAll(); }/** * 等待涂蜡,如果当前没有涂蜡,则一直等待 * @throws InterruptedException */ public synchronized void waitForWaxing() throws InterruptedException{while(waxOn==false)wait(); }/** * 等待抛光,如果当前已经涂蜡,则使涂蜡一直等待 * @throws InterruptedException */ public synchronized void waitForBuffing() throws InterruptedException{while(waxOn==true)wait(); } } class WaxOn implements Runnable{private Car car; public WaxOn(Car c){car=c; }@Override public void run() {try{while(!Thread.interrupted()){System.out.println("Wax On! "); TimeUnit.MILLISECONDS.sleep(200); //涂蜡,并唤醒抛光线程 car.waxed(); //使涂蜡等待 car.waitForBuffing(); }}catch (InterruptedException e){System.out.println("Exiting via interrupt"); }System.out.println("Ending Wax On task"); } } class WaxOff implements Runnable{private Car car; public WaxOff(Car c){car=c; }@Override public void run() {try{while(!Thread.interrupted()){//等待涂完蜡 car.waitForWaxing(); System.out.println("Wax off!"); TimeUnit.MILLISECONDS.sleep(200); //抛光,并唤醒涂蜡线程 car.buffed(); }}catch (InterruptedException e){System.out.println("Exiting via interrupt"); }System.out.println("Ending Wax Off task"); } } public class WaxOMatic {public static void main(String[] args) throws Exception{Car car=new Car(); ExecutorService exec= Executors.newCachedThreadPool(); exec.execute(new WaxOff(car)); exec.execute(new WaxOn(car)); TimeUnit.SECONDS.sleep(5); exec.shutdownNow(); } }
这篇关于线程实现交替任务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!