线程实现交替任务
来源:互联网 发布:国际关系学院知乎 编辑:程序博客网 时间:2024/06/05 22:50
涂完蜡才能抛光,抛光完又可以涂蜡
class Car{ private boolean waxOn=false; /** * 涂蜡 */ public synchronized void waxed(){ waxOn=true; notify(); } /** * 抛光 */ public synchronized void buffed(){ waxOn=false; notifyAll(); } /** * 等待涂蜡,如果当前没有涂蜡,则一直等待 * @throws InterruptedException */ public synchronized void waitForWaxing() throws InterruptedException{ while(waxOn==false) wait(); } /** * 等待抛光,如果当前已经涂蜡,则使涂蜡一直等待 * @throws InterruptedException */ public synchronized void waitForBuffing() throws InterruptedException{ while(waxOn==true) wait(); }}class WaxOn implements Runnable{ private Car car; public WaxOn(Car c){ car=c; } @Override 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 WaxOff implements Runnable{ private Car car; public WaxOff(Car c){ car=c; } @Override 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 WaxOMatic { public static void main(String[] args) throws Exception{ Car car=new Car(); ExecutorService exec= Executors.newCachedThreadPool(); exec.execute(new WaxOff(car)); exec.execute(new WaxOn(car)); TimeUnit.SECONDS.sleep(5); exec.shutdownNow(); }}
0 0
- 线程实现交替任务
- 通过Handler与线程嵌套TimerTask实现循环交替任务
- 线程交替有序执行任务
- java 之 三个线程交替执行任务
- 三个线程交替执行,c++实现
- Java实现两个线程交替打印问题
- wait,notify实现两个线程交替打印
- java实现让n个线程严格交替执行
- Java两个线程交替打印(实现Runnable接口)
- 面试题一:实现两个线程交替打印数字
- 2.使用线程实现数字与代码的交替打印
- 两个线程交替执行
- java 线程 交替输出
- 线程交替输出
- 线程交替打印
- 线程交替输出
- 两个线程交替执行
- 使用Java线程并发库实现两个线程交替打印的线程题
- DAO模式中的实体类
- 数据模型的三要素
- 【实用手记】Linux如何设置在当前目录下打开终端
- html表格 <td> 文字过多需要隐藏的正确方法
- Oracle 计算两个时间的差值
- 线程实现交替任务
- Ubuntu 查看磁盘空间大小命令<转>
- IOS 系统自带的分享功能之 UIActivityViewController
- 什么是句柄?指针和句柄的区别
- 【RPC】你应该知道的 RPC 原理
- 三个线程顺序打印ABC
- Java去除数组中重复元素的两种实现
- hadoop的调度
- CDN和DNS的区别