import java.util.concurrent.*; class Car{ // 类名改成汽车美容馆还差不多,呵呵 private boolean waxOn = false; public synchronized void waxed() { waxOn = true; System.out.println("打蜡工作做完了!!!"); notifyAll(); } public synchronized void buffed(){ waxOn = false; System.out.println("抛光工作做完了!!"); notifyAll(); } public synchronized void waitForWaxing() throws InterruptedException{ System.out.println("等打蜡中。。。"); while(waxOn == false) wait(); // 如果没有开始打蜡,释放对象锁,挂起,等待打蜡的哥们打蜡去 } public synchronized void waitForBuffing() throws InterruptedException{ System.out.println("等抛光中。。。"); while(waxOn == true) wait(); // 如果正在进行打蜡工作,释放对象锁,挂起,等待抛光的哥们把工作做完 } } class WaxOn implements Runnable{ private Car car; public WaxOn(Car c){ this.car = c; } @Override public void run() { // TODO Auto-generated method stub try{ while(!Thread.interrupted()){ System.out.print("Wax On! "); TimeUnit.MICROSECONDS.sleep(300); // 模拟打蜡的工作时间 car.waxed(); car.waitForBuffing(); } }catch(InterruptedException e){ System.out.println("Exiting via interrupt"); } System.out.println("Ending Wax On task"); } } class WaxOff implements Runnable{ private Car car; public WaxOff(Car c){ car = c; } @Override public void run() { // TODO Auto-generated method stub try{ while(!Thread.interrupted()){ car.waitForWaxing(); System.out.print("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 WaxOMatic { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Car car = new Car(); ExecutorService exec = Executors.newCachedThreadPool(); exec.execute(new WaxOff(car)); exec.execute(new WaxOn(car)); TimeUnit.SECONDS.sleep(5); exec.shutdownNow(); } }
多线程协同工作代码
最新推荐文章于 2022-07-06 23:04:38 发布