zoukankan      html  css  js  c++  java
  • Lock 从来就没有成功过

    package lime.thinkingInJava._021._005._003;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.locks.Condition;
    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    /**
     * @Author : Lime
     * @Description :
     * @Remark :
     */
    class Car{
        private Lock lock = new ReentrantLock();
        private Condition condition = lock.newCondition();
        private boolean waxOn = false;
    
        public void waxOn(){
            lock.lock();
            try{
                waxOn = true;
                condition.signalAll();
            }finally {
                lock.unlock();
            }
        }
        public void waxOff(){
            lock.lock();
            try{
                waxOn = false;
                condition.signalAll();
            }finally {
                lock.unlock();
            }
        }
        public void waitForWaxing() throws InterruptedException {
            lock.lock();
            try{
                while (waxOn = false){
                    condition.await();
                }
            }finally {
                lock.unlock();
            }
        }
        public void waitForBuffing() throws InterruptedException {
            lock.lock();
            try{
                while (waxOn = true){
                    condition.await();
                }
            }finally {
                lock.unlock();
            }
        }
    }
    class WaxOn implements Runnable{
        private Car car;
    
        public WaxOn(Car car) {
            this.car = car;
        }
    
        @Override
        public void run() {
            try {
                while (!Thread.interrupted()) {
                    System.out.println("waxOn");
                    TimeUnit.MILLISECONDS.sleep(200);
                    car.waxOn();
                    car.waitForBuffing();
                }
            } catch (InterruptedException e) {
            }
        }
    }
    class WaxOff implements Runnable{
        private Car car;
    
        public WaxOff(Car car) {
            this.car = car;
        }
        public void run(){
            try {
                while (!Thread.interrupted()) {
                    car.waitForWaxing();
                    System.out.println("waxOff");
                    TimeUnit.MILLISECONDS.sleep(200);
                    car.waxOff();
                }
            } catch (InterruptedException e) {
            }
        }
    }
    public class WaxOMatic2 {
        public static void main(String[] args) throws InterruptedException {
            ExecutorService exec = Executors.newCachedThreadPool();
            Car car = new Car();
            exec.execute(new WaxOff(car));
            exec.execute(new WaxOn(car));
            TimeUnit.SECONDS.sleep(3);
            exec.shutdownNow();
        }
    }

    啦啦啦

  • 相关阅读:
    P3 创建项目(下)
    P2 创建项目(中)
    P1 创建项目(上)
    ASP.NET Core 3.x 入门视频(完结)
    网易云微专业《职场人必学的Python技能课》
    01.Python配置与运行
    阶段一-03.地址,订单,支付,定时任务开发-第1章 收货地址功能开发-1-6 收货地址
    ASYNC PROGRAMING IN JAVASCRIPT[转]
    Bluebird-NodeJs的Promise
    理解Nodejs的Event Loop
  • 原文地址:https://www.cnblogs.com/ClassNotFoundException/p/7887550.html
Copyright © 2011-2022 走看看