package test;
/**
* 內容:創建兩個靜態對象和兩個線程,第一個線程給第一個對象加鎖,第二個線程給第二個對象加鎖,當第一個線程要獲取第二個對象的鎖時
* 發現第二個對象的鑰匙正在被第二個線程持有,所以第一個線程要的等待第二個線程釋放該鎖,而第二個線程要釋放該鎖就有執行該synchronize塊,
* 所以要去拿第一個對象的鎖,而第一個對象的鎖,正在被第一個線程佔有,於是兩個線程互相等待,形成死鎖。
* @author Administrator
*
*/
public class DeadLock {
private static Object lock1=new Object();
private static Object lock2=new Object();
public static void main(String[] args) {
// TODO Auto-generated method stub
new Thread(){
public void run(){
synchronized (lock1) {
System.out.println("thread1 get lock1;");
try{
Thread.sleep(100);
}catch (Exception e) {
// TODO: handle exception
}
synchronized (lock2) {
System.out.println("thread1 get lock2;");
}
}
System.out.println("thread1 end...");
}
}.start();
new Thread(){
public void run(){
synchronized (lock2) {
System.out.println("thread2 get lock2;");
try{
Thread.sleep(100);
}catch (Exception e) {
// TODO: handle exception
}
synchronized (lock1) {
System.out.println("thread2 get lock1;");
}
}
System.out.println("thread2 end");
}
}.start();
}
}
java 多線程死鎖案例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.