线程实现交替任务

来源:互联网 发布:国际关系学院知乎 编辑:程序博客网 时间:2024/06/05 22:50

涂完蜡才能抛光,抛光完又可以涂蜡

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();    }}

0 0
原创粉丝点击