用Java模拟一个死锁

模拟一个死锁:一个线程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")
            }
        }
    }
}
原创文章 64 获赞 27 访问量 9424

猜你喜欢

转载自blog.csdn.net/weixin_44893585/article/details/104581081