模擬一個死鎖:一個線程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")
}
}
}
}