当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么他永远被阻塞,当线程A持有锁L并想获得锁M的同时,线程B持有锁M并同时尝试获得锁L时,那么两个线程将永远的等待下去,这中情况就是简单的死锁的形式,其中多个线程由于存在环路的锁依赖关系而永远的等待下去,那么就存在一个死锁。

1、锁顺序死锁

  下面是顺序锁的一个列子,代码如下:

 1 package deadLock;
 2 
 3 public class LeftRightDeadLock {
 4     private final Object left = new Object();
 5     private final Object right = new Object();
 6     
 7     public void leftRight() throws Exception{
 8         synchronized (left) {
 9             Thread.sleep(2000);
10             synchronized (right) {
11                 System.out.println("left to right");
12             }
13         }
14     }
15     
16     
17     public void rightLeft() throws Exception{
18         synchronized (right) {
19             Thread.sleep(2000);
20             synchronized (left) {
21                 System.out.println("right to left");
22             }
23         }
24     }
25     
26 }
View Code

相关文章: