![](https://img2018.cnblogs.com/blog/779593/201910/779593-20191024223938286-1870524388.jpg)
package com.yonyou.sci.gateway.exec.sisuo;
public class LockA {
// 构造方法私有化,控制这个锁对象不能使用 new 来创建
private LockA(){};
static final LockA locka = new LockA();
}
package com.yonyou.sci.gateway.exec.sisuo;
public class LockB {
// 构造方法私有化,控制这个锁对象不能使用 new 来创建
private LockB(){};
static final LockB lockb = new LockB();
}
package com.yonyou.sci.gateway.exec.sisuo;
/**
* 实现死锁代码
* 运行 if 里面的 LockA.locka是,这时候执行 else 的 LockB.lockb 方法,就会出现死锁的情况
*/
public class LockRunnable implements Runnable {
int i = 0;
@Override
public void run () {
while (true) {
if( i%2 == 0){
synchronized (LockA.locka){
System.out.println("if...locka");
synchronized (LockB.lockb) {
System.out.println("if...lockb");
}
}
}
else {
synchronized (LockB.lockb){
System.out.println("else...lockb");
synchronized (LockA.locka){
System.out.println("else...locka");
}
}
}
i++;
}
}
}
package com.yonyou.sci.gateway.exec.sisuo;
public class LockMain {
public static void main (String[] args) {
LockRunnable lr = new LockRunnable();
Thread t1 = new Thread(lr);
Thread t2 = new Thread(lr);
t1.start();t2.start();
}
}