* 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