模拟一个死锁:一个线程1在锁定A的过程中,需要锁定B,另一个线程2在锁定B的过程中需要锁定A,线程1想申请B 的锁已经被线程2锁定了,线程2 想申请A的锁,已经被线程1 锁定了,两个线程都无法执行,构成死锁。
public class T(){
public static String resource1="resource1";
public static String resource2="resource2";
public static void main(String[] args){
new Thread(new ClassA()).start();
new Thread(new ClassB()).start();
}
}
public class ClassA() implements Runnable{
public void run(){
synchronized(T.resource1){
System.out.println("得到resource1的 lock")
Thread.sleep(3000);
//下面请求resource2的锁
synchronized(T.resource2){
System.out.println("得到resource2 的lock")
}
}
}
}
public class ClassB() implements Runnable{
public void run(){
synchronized(T.resource2){
System.out.println("得到resource1的 lock")
Thread.sleep(3000);
//下面请求resource2的锁
synchronized(T.resource1){
System.out.println("得到resource2 的lock")
}
}
}
}
来源:CSDN
作者:飞机飞机你在哪
链接:https://blog.csdn.net/weixin_44893585/article/details/104581081