当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么他永远被阻塞,当线程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 }