用Java模拟一个死锁

我的未来我决定 提交于 2020-03-01 08:38:36

模拟一个死锁:一个线程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")
            }
        }
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!