首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

线程例证[Condition, SignlAll, await]

2012-09-06 
线程例子[Condition, SignlAll, await]package concurrency.waxomaticimport java.util.concurrent.Execu

线程例子[Condition, SignlAll, await]

package concurrency.waxomatic;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;class Car2{private Lock lock = new ReentrantLock();private Condition condition = lock.newCondition();private boolean waxOn = false;public void waxed(){lock.lock();try {waxOn = true;// Ready to buff;condition.signalAll();} finally {lock.unlock();}}public void buffed(){lock.lock();try{waxOn = false;// Ready for another coat of waxcondition.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 WaxOn2 implements Runnable{private Car car;public WaxOn2(Car c){car  = c;}public void run(){try {while(!Thread.interrupted()){System.out.println("Wax on! ");TimeUnit.MILLISECONDS.sleep(200);car.waxed();car.waitForBuffing();}} catch (InterruptedException e) {System.out.println("Exiting via interrupt");}System.out.println("Ending Wax On task");}}class WaxOff2 implements Runnable{private Car car;public WaxOff2(Car c){car = c;}public void run(){try {while(!Thread.interrupted()){car.waitForWaxing();System.out.println("Wax Off! ");TimeUnit.MILLISECONDS.sleep(200);car.buffed();}} catch (InterruptedException e) {System.out.println("Exiting via interrupt");}System.out.println("Ending Wax Off task");}}public class WaxOMatic2 {public static void main(String[] args) throws InterruptedException {Car car = new Car();ExecutorService exec = Executors.newCachedThreadPool();exec.execute(new WaxOff(car));exec.execute(new WaxOn(car));TimeUnit.SECONDS.sleep(5);exec.shutdownNow();}}
?

热点排行
Bad Request.