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

    啦啦啦

  • 相关阅读:
    最小二乘法(转载)
    负反馈放大器电路(转载)
    串联谐振与并联谐振的区别_串联谐振与并联谐振产生谐振的条件(转载)
    运算放大器:虚短与虚断(转载)
    人物根据镜头方向旋转和移动
    浅析勒贝格积分的思想在数论函数求和中的应用
    一类巧妙利用利用分治的序列求值
    YAOI Round #1 (Div.2) 题解
    NOIP 2020 游记
    P4550 收集邮票 与 灵异的期望
  • 原文地址:https://www.cnblogs.com/ClassNotFoundException/p/7887550.html
Copyright © 2011-2022 走看看