線程死鎖
阿新 • • 發佈:2017-09-01
繼續 log imp star system new lean spa pre 所謂的線程死鎖,是指在多線程運行的過程中,線程1擁有鎖a,而需要鎖b來繼續執行,
而此時,線程2擁有鎖b而需要鎖a來繼續執行,那麽此時會形成死鎖,兩個線程會同時等待。
在編程的過程中應盡量的避免線程死鎖。
有時在面試中會要求寫出一個死鎖的程序演示,如下:
1 //寫一個死鎖程序 2 public class DeadLock { 3 //主程序執行 4 public static void main(String[] args) { 5 Thread thread1 = new Thread(new MyThread(true)); 6 Thread thread2 = newThread(new MyThread(true)); 7 thread1.start(); 8 thread1.start(); 9 thread2.start(); 10 } 11 } 12 class MyThread implements Runnable{ 13 private boolean flag; 14 //標記,用來分割線程執行部分 15 public MyThread(boolean flag) { 16 this.flag = flag; 17 }18 @Override 19 public void run() { 20 if (flag) { 21 //線程1擁有鎖1而需要鎖2 22 synchronized(MyLock.object1) { 23 System.out.println("鎖1"); 24 synchronized(MyLock.object2) { 25 System.out.println("鎖2");26 } 27 } 28 }else { 29 //線程2擁有鎖2而需要鎖1 30 synchronized(MyLock.object2) { 31 System.out.println("鎖2"); 32 synchronized(MyLock.object1) { 33 System.out.println("鎖1"); 34 } 35 } 36 } 37 38 } 39 } 40 class MyLock{ 41 //創建兩個顯式的鎖 42 static Object object1 = new Object(); 43 static Object object2 = new Object(); 44 }
線程死鎖