public class Test {
public static void main(String[] args) throws Exception {
final Object lock="";
Thread t1=new Thread(){
public void run(){
try {
System.out.println("t1 wait begin");
synchronized (lock) {
System.out.println("t1 get lock, wait begin");
lock.wait();
System.out.println("t1 wait end,release lock");
lock.notifyAll();
}
System.out.println("t1 wait end");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t1.start();
System.out.println("t1 start and sleep");
for(int i=0;i<10000001;i++){
if(i==10000000)
System.out.println("i end");
}
Thread.sleep(5000);
System.out.println("sleep(5000) end");
System.out.println("main lock begin");
synchronized (lock) {
System.out.println("main get lock");
lock.notify();
System.out.println("notify");
Thread.sleep(10000);
System.out.println("sleep 10000 end");
System.out.println("main wait begin ");
lock.wait();
System.out.println("main wait end");
}
System.out.println("main lock end");
}
}
sleep()用于暂时停止一个线程的执行, wait()方法的作用是让当前线程释放其所持有的"对象互斥锁",进入wait队列(等待队列);而notify()/notifyAll方法的作用是唤醒一个或所有正在等待队列中等待的线程,并将它(们)移入等待同一个"对象互斥锁"的队列。