线程实现交替任务

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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值