//描述:证明wait只释放当前的那把锁
public class WaitNotifyReleaseOwnMonitor {
//创建两把锁
private static volatile Object resourceA = new Object();
private static volatile Object resourceB = new Object();
public static void main(String[] args) {
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
//给线程A加上resourceA锁
synchronized (resourceA) {
System.out.println("ThreadA got resourceA lock");
//给线程A加上resourceB锁
synchronized (resourceB) {
System.out.println("ThreadA got resourceB lock");
try {
//用wait释放resourceA锁
System.out.println("ThreadA releases resourceA lock.");
resourceA.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//线程B尝试得到resourceA锁
synchronized (resourceA) {
System.out.println("ThreadB got resourceA lock.");
}
//线程B尝试得到resourceB锁
synchronized (resourceB) {
System.out.println("ThreadB got resourceB lock.");
}
}
});
//启动两个线程
thread1.start();
thread2.start();
}
}
最终得到的结果是



