Demo.java:
package cn.xxx.demo; public class Demo { public static void main(String[] args) { DeadLock dead = new DeadLock(); Thread t0 = new Thread(dead); // 创建线程 Thread t1 = new Thread(dead); t0.start(); // 开启线程 t1.start(); } }DeadLock.java(线程类,实现Runnable接口,重写run方法):
package cn.xxx.demo; public class DeadLock implements Runnable{ // 实现Runnable接口 private int i = 0; public void run(){ // 重写run方法 while(true){ if(i%2==0){ //先进入A同步,再进入B同步 synchronized(LockA.locka){ // 同步 System.out.println("我拿到了资源A,还需要资源B"); synchronized(LockB.lockb){ // 同步嵌套 System.out.println("我也拿到了资源B,可以开始执行任务了"); } } }else{ //先进入B同步,再进入A同步 synchronized(LockB.lockb){ // 同步 System.out.println("我拿到了资源B,还需要资源A"); synchronized(LockA.locka){ // 同步嵌套 System.out.println("我也拿到了资源A,可以开始执行任务了"); } } } i++; } } }LockA.java(对象锁A):
package cn.xxx.demo; public class LockA { private LockA(){} public static final LockA locka = new LockA(); }LockB.java(对象锁B):
package cn.xxx.demo; public class LockB { private LockB(){} public static final LockB lockb = new LockB(); }