做买包子案例:等待唤醒wait
package com.chunzhi.Test10WaitAndNotify; /* 等待唤醒案例:线程之间的通信 创建一个顾客线程:告知老板要的包子种类和数量,调用wait方法,放弃cpu执行权,进入到WAITING状态(无限等待) 创建一个老板线程:花了5秒做包子,做好包子之后,调用notify方法,唤醒顾客吃包子 */ public class Test01WaitAndNotify { public static void main(String[] args) { // 创建一个锁对象 Object obj = new Object(); // 创建匿名顾客线程 new Thread() { @Override public void run() { while (true) { // 保证等待和唤醒的线程只能有一个执行,需要使用同步技术 synchronized (obj) { System.out.println("告知老板包子的种类和数量"); // 进行线程等待,等待老板做包子 try { obj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } // 被notify方法唤醒后执行的代码 System.out.println("顾客开始吃包子"); System.out.println("------------------"); } } } }.start(); // 创建匿名老板线程 new Thread() { @Override public void run() { while (true) { // 做包子需要3秒钟 try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } // 保证等待和唤醒的线程只能有一个执行,需要使用同步技术 synchronized (obj) { System.out.println("老板花了3秒做好了包子,可以开吃了"); // 包子做好后,使用notify方法唤醒顾客吃包子 obj.notify(); } } } }.start(); } }