public class Test01 extends Thread {
public Object o1;
public Object o2;
public Test01(Object o1,Object o2){
this.o1 = o1;
this.o2 = o2;
}
@Override
public void run() {
synchronized (o1) {
System.out.println("线程A持有o1对象锁");
synchronized (o2) {
System.out.println("线程A持有o1和o2两个对象锁");
o2.notify();
}
System.out.println("线程A释放o2锁,但是继续持有o1锁");
}
System.out.println("线程A释放o1锁,不再持有对象锁");
}
}
empty
public class Test02 extends Thread {
public Object o1;
public Object o2;
public Test02(Object o1,Object o2){
this.o1 = o1;
this.o2 = o2;
}
@Override
public void run() {//死锁
synchronized (o2) {
System.out.println("线程B持有o2对象锁");
try {
o2.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o1) {
System.out.println("线程B持有o2和o1两把对象锁");
}
System.out.println("线程B释放o1锁,但是继续持有o2锁");
}
System.out.println("线程B释放o2锁,不再持有对象锁");
}
}
当线程O1和O2线程都有自己的线程锁,并且O1线程锁里还有O2持有线程锁,反之并O2线程锁里还有O1持有线程锁,两个线程同是运行时就发生了死锁现象,O1和O2都
在等对方释放资源,简单的解决办法就是用用Object类中的wait()和notify(),用法是谁等待,谁打开。
转载请注明原文地址: https://ju.6miu.com/read-1125212.html