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