七、死锁

进程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  }  

死锁形成的必要条件总结(都满足之后就会产生):

①、互斥条件:资源不能被共享,只能被同一个进程使用;

②、请求与保持条件:已经得到资源的进程可以申请新的资源;

③、非剥夺条件:已经分配的资源不能从相应的进程中强制剥夺;

④、循环等待条件:系统中若干进程形成环路,该环路中每个进程都在等待相邻进程占用的资源。

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