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

    啦啦啦

  • 相关阅读:
    WAF与IPS的区别总结
    web后门排查与高效分析web日志技巧
    如何做一名好的web安全工程师?
    从“黑掉Github”学Web安全开发
    DNS劫持
    万网上如何将IP和申请的域名绑定
    如何申请网站域名
    什么是域名?什么网站名?什么是URL?
    myeclipse svn 插件去除已经保存的密码方法
    SVN中检出 和 导出 的区别
  • 原文地址:https://www.cnblogs.com/ClassNotFoundException/p/7887550.html
Copyright © 2011-2022 走看看