用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")
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章