@Service
public class DeadLockService {
private static final Object ROURCEA = new Object();
private static final Object ROURCEB = new Object();
public void getRourceAAfterRourceB() {
synchronized (ROURCEA) {
System.out.println("getRourceAAfterRourceB get ROURCEA");
try {
// 休眠 2 秒,目的是为了让其他线程有足够的时间获取 ResourceB
// 为什么要用 sleep,因为 sleep 方法不会释放锁对象
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (ROURCEB) {
System.out.println("getRourceAAfterRourceB get ROURCEB");
}
}
}
public void getRourceBAfterRourceA() {
synchronized (ROURCEB) {
System.out.println("getRourceBAfterRourceA get ROURCEB");
try {
// 休眠 5 秒,目的是为了让其他线程有足够的时间获取ROURCEA
// 为什么要用 sleep,因为 sleep 方法不会释放锁对象
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (ROURCEA) {
System.out.println("getRourceBAfterRourceA get ROURCEA");
}
}
}
}