并发编程大师系列之:wait/notify/notifyAll/condition
Posted zhangjianbing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发编程大师系列之:wait/notify/notifyAll/condition相关的知识,希望对你有一定的参考价值。
先把例子写出来,有空再补充。。。
/** * @author itachi * @Title: Express * @Description: 快递类 * @date 2018/7/4下午10:27 */ public class Express { // 始发地 private final static String CITY = "ShangHai"; // 里程变化 private int km; // 地点变化 private String site; Express() { } Express(int km, String site) { this.km = km; this.site = site; } // 里程数变化,会唤起线程 public synchronized void changeKm() { this.km = 101; notify(); } // 地点变化会唤起线程 public synchronized void changeSite() { this.site = "BeiJing"; notify(); } // 用来监听里程数的变化 public synchronized void waitKm() { while (this.km <= 100) { try { wait(); System.out.println(Thread.currentThread().getId() + "-号监听===里程变化===的线程被唤醒了。。。"); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getId() + "-号监听===里程变化===的线程去做相应的事了"); } // 用来监听地点的变化 public synchronized void waitSite() { while (CITY.equals(this.site)) { try { wait(); System.out.println(Thread.currentThread().getId() + "-号监听===地点变化===的线程被唤醒了。。。"); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getId() + "-号监听===地点变化===的线程去做相应的事了"); } }
/** * @author itachi * @Title: Test * @Description: 测试 * @date 2018/7/4下午10:40 */ public class Test { // 初始化快递 private static Express express = new Express(0, "ShangHai"); // 用来监听里程数变化的线程 static class CheckKm implements Runnable { @Override public void run() { express.waitKm(); } } // 用来监听地点变化的线程 static class CheckSite implements Runnable { @Override public void run() { express.waitSite(); } } public static void main(String[] args) throws InterruptedException{ // 启动三个线程去监听里程数的变化 for (int i = 0; i <= 2; i++) { new Thread(new CheckKm()).start(); } // 启动三个线程去监听地点的变化 for (int i = 0; i <= 2; i++) { new Thread(new CheckSite()).start(); } // 主线程睡眠一秒,异常信息抛出去 Thread.sleep(1000); // 让快递的地点发生变化 express.changeSite(); } }
9-号监听===里程变化===的线程被唤醒了。。。
14-号监听===地点变化===的线程被唤醒了。。。 14-号监听===地点变化===的线程去做相应的事了 13-号监听===地点变化===的线程被唤醒了。。。 13-号监听===地点变化===的线程去做相应的事了 12-号监听===地点变化===的线程被唤醒了。。。 12-号监听===地点变化===的线程去做相应的事了 11-号监听===里程变化===的线程被唤醒了。。。 10-号监听===里程变化===的线程被唤醒了。。。 9-号监听===里程变化===的线程被唤醒了。。。
以上是关于并发编程大师系列之:wait/notify/notifyAll/condition的主要内容,如果未能解决你的问题,请参考以下文章