线程的等待:
(1)、void notify() 唤醒在此对象监视器上等待单个线程。
(2)、void notifyAll() 唤醒在次对象监视器上等待的所有线程。
线程的唤醒:
(1)、void wait() 导致当前线程等待,直到其它线程调用此对象的notify()和notifyAll()方法。
(2)、void wait(long timeout) 导致当前线程等待,直到其它线程调用此对象的notify()和notifyAll()方法,或者超过指定的时间量。
(3)、导致当前线程等待,直到其它线程调用此对象的notify()和notifyAll()方法,或者其它线程中断当前线程,或者超过指定的时间量。
注意事项:
notify()、notifyAll()和wait()方法等必须在线程同步的环境当中使用,notify()、notifyAll()和wait()方法都是Object的实例方法。
public class Thread_Wait_Notify {
public static void main(String args[]){
InsideThreadImpl_Wait_Notify insideThread=new InsideThreadImpl_Wait_Notify();
insideThread.start();
synchronized (insideThread){
try {
System.out.println("*************等待对象InsideThreadImpl计算完成**************");
//等待
insideThread.wait();
}catch (Exception e){
e.printStackTrace();
}
System.out.println("******************计算完成的总和:"+insideThread.total+"************************");
}
}
}
class InsideThreadImpl_Wait_Notify extends Thread{
int total=0;
@Override
public void run() {
synchronized (this){
for (int i=0;i<101;i++){
total+=i;
}
//唤醒线程
notify();
}
}
}
注意:当在对象上调用wait()方法是,执行该代码的线程立即会释放该对象上的锁。当调用notify()的时候,并不会放弃对象的锁。