package synchronize;apache
import com.sun.org.apache.bcel.internal.generic.NEW;ide
public class SleepNotifyWait {.net
public static void main(String[]args){
final Object object=new Object();
Thread t1=new Thread(new Runnable() {
@Override
public void run() {
synchronized (object) {
System.out.println(1);
try {
object.wait();
//在其余线程调用此对象的 notify() 方法或 notifyAll() 方法前,致使当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用同样。
//当前线程必须拥有此对象监视器。该线程发布对此监视器的全部权并等待,直到其余线程经过调用 notify方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。
//而后该线程将等到从新得到对监视器的全部权后才能继续执行。线程
} catch (Exception e) {
}
System.out.println(2);
}
}
});
Thread t2=new Thread(new Runnable() {
@Override
public void run() {
synchronized (object) {
System.out.println(3);
try {
object.notify();
/*唤醒在此对象监视器上等待的单个线程。若是全部线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现作出决定时发生。
* 线程经过调用其中一个 wait 方法,在对象的监视器上等待。
直到当前线程放弃此对象上的锁定,才能继续执行被唤醒的线程。被唤醒的线程将以常规方式与在该对象上主动同步的其余全部线程进行竞争;
例如,唤醒的线程在做为锁定此对象的下一个线程方面没有可靠的特权或劣势。
*/
Thread.sleep(1000);
} catch (Exception e) {
}
System.out.println(4);
}
}
});
t1.start();
t2.start();
}
}
对象