* notify notifyAll wait 使用
* 1 一个对象执行相应的方法
* (一个对象wait后,需要调用同一个对象的notify唤醒这个对象的wait,可以在不同线程执行)
* 2 个人理解方法执行必须在synchronize代码块中执行(因为方法执行的时候必须获得对象监视器,个人理解监视器就是锁)
* 3 执行wait后当前线程会释放掉这个对象的锁,则其他线程就会获得这个对象锁(其他线程就能执行synchronize代码块中代码)
*
* 场景设想: 一个运输公司要运输一批货物
* 领导告诉所有的搬运工时刻准备着,(主线程创建N个线程待用,所有线程处于等待转改)
* 一旦运输货物到了, (资源转备好后)
* 马上开始执行搬运工作 (主线程调用notifyAll,唤醒所有子线程开始执行 )
public class TestNotify implements Runnable{ private Integer counter=0; private String waitObj ; public TestNotify(String wait,int counter2 ) { this.waitObj=wait ; this.counter = counter2 ; } public static void main(String[] args) { String wait1 = "" ; for(int i=0;i<3;i++){ TestNotify d = new TestNotify(wait1,i); new Thread(d).start(); } try { Thread.sleep(10000); System.out.println( " 主线程结束 "); synchronized (wait1) { wait1.notifyAll(); } } catch (InterruptedException e) { e.printStackTrace(); } } @Override public void run() { synchronized (waitObj) { try { System.out.println("子线程启动=="+counter); Thread.sleep(2000); waitObj.wait(); System.out.println("子线程结束"+counter); } catch ( Exception e) { e.printStackTrace(); } } } }
结果分析:子线程 0,1,2都计入wait后主线程调用notifyAll,则子线程开始执行wait后面代码;
子线程启动==0 子线程启动==2 子线程启动==1 主线程结束 子线程结束1 子线程结束2 子线程结束0