1. 程式人生 > >線程死鎖

線程死鎖

繼續 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 = new
Thread(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 }

線程死鎖