记录一下之前写过的一段模拟死锁的代码:
/**
* 模拟死锁
*
* @author lixiang
* @date 2018年10月12日 - 9:51
* @history 2018年10月12日 - 9:51 lixiang create.
*/
public class HoldLockDemo {
private static Object[] lock = new Object[10];
private static Random random = new Random();
static {
for (int i = 0; i < lock.length; i++) {
lock[i] = new Object();
}
}
public static class HoldLockTask implements Runnable {
private int i;
public HoldLockTask(int i) {
this.i = i;
}
@Override
public void run() {
try {
while (true) {
synchronized (lock[i]) {
if (i % 2 == 0) {
// 等待
lock[i].wait(random.nextInt(10));
} else {
// 通知
lock[i].notifyAll();
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
for (int i = 0; i < lock.length * 2; i++) {
// 每两个线程使用同一个锁对象
new Thread(new HoldLockTask(i / 2)).start();
}
}
}
如有问题还请不吝赐教!!!