七、死鎖

進程A中包含資源A,進程B中包含資源B,A的下一步需要資源B,B的下一步需要資源A,所以它們就互相等待對方佔有的資源釋放,所以也就產生了一個循環等待死鎖。
代碼如下:

1 public class DeadLock {
 2 
 3     public static void main(String[] args) {
 4         Thread t1 = new Thread(new DeadLockTest(true));
 5         Thread t2 = new Thread(new DeadLockTest(false));
 6         t1.start();
 7         t2.start();
 8     }
 9 }
10 
11 class DeadLockTest implements Runnable{
12     
13     private boolean flag;
14     static Object obj1 = new Object();
15     static Object obj2 = new Object();
16     public DeadLockTest(boolean flag) {
17         this.flag = flag;
18     }
19     public void run(){
20         if(flag){
21             synchronized(obj1){
22                 System.out.println("if lock1");
23                 synchronized (obj2) {
24                     System.out.println("if lock2");
25                 }
26             }
27         }else{
28             synchronized (obj2) {
29                 System.out.println("else lock2");
30                 synchronized (obj1) {
31                     System.out.println("else lock1");
32                 }
33             }
34         }
35     }
36  }  

死鎖形成的必要條件總結(都滿足之後就會產生):

①、互斥條件:資源不能被共享,只能被同一個進程使用;

②、請求與保持條件:已經得到資源的進程可以申請新的資源;

③、非剝奪條件:已經分配的資源不能從相應的進程中強制剝奪;

④、循環等待條件:系統中若干進程形成環路,該環路中每個進程都在等待相鄰進程佔用的資源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章