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

    啦啦啦

  • 相关阅读:
    1. Visual Basic概述
    4. HTML5
    Android 操作SQLite基本用法
    android开发规范
    ListView与ArrayAdapter的搭配使用
    个人笔记——Android网络技术
    Java中forEach, 用来遍历数组
    详细讲解Android的网络通信(HttpUrlConnection和HttpClient)
    简单使用URLConnection、HttpURLConnection和HttpClient访问网络资源
    Http编程之HttpClient
  • 原文地址:https://www.cnblogs.com/ClassNotFoundException/p/7887550.html
Copyright © 2011-2022 走看看