顺序锁的实现代码如下所示:
publicclass SolveDeadLockExample { public static void main(String[] args) { Object lockA = new Object(); // 创建锁 A Object lockB = new Object(); // 创建锁 B // 创建线程 1 Thread t1 = new Thread(new Runnable() { @Override public void run() { synchronized (lockA) { System.out.println("线程 1:获取到锁 A!"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程 1:等待获取 B..."); synchronized (lockB) { System.out.println("线程 1:获取到锁 B!"); } } } }); t1.start(); // 运行线程 // 创建线程 2 Thread t2 = new Thread(new Runnable() { @Override public void run() { synchronized (lockA) { System.out.println("线程 2:获取到锁 A!"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程 2:等待获取B..."); synchronized (lockB) { System.out.println("线程 2:获取到锁 B!"); } } } }); t2.start(); // 运行线程 } }
以上程序的执行结果如下:
从上述执行结果可以看出,程序并没有出现死锁的问题。