public class TestMonitor {
public static Object object = new Object();
public static void main(String[] args){
Thread1 thread1 = new Thread1();
Thread2 thread2 = new Thread2();
thread1.start();
try{Thread.sleep(200);
}catch (InterruptedException e){
e.printStackTrace();
}
thread2.start();
}
static class Thread1 extends Thread{
@Override
public void run(){
synchronized (object){
System.out.println("线程: "+Thread.currentThread().getName()+"正在执行");
System.out.println("线程 "+Thread.currentThread().getName()+"即将wait()");
try {
object.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
System.out.println("线程 "+Thread.currentThread().getName()+"得到了锁");
}
}
static class Thread2 extends Thread{
@Override
public void run(){
synchronized (object){
System.out.println("线程: "+Thread.currentThread().getName()+"正在执行");
object.notify();
System.out.println("线程:"+Thread.currentThread().getName()+"调用了object.notify()方法");
}
System.out.println("线程: "+Thread.currentThread().getName()+"释放了锁");
}
}
}
输出结果:
线程: Thread-0正在执行
线程 Thread-0即将wait()
线程: Thread-1正在执行
线程:Thread-1调用了object.notify()方法
线程: Thread-1释放了锁
线程 Thread-0得到了锁