能点击题目看的一定知道什么是死锁以及其形成原因,所以就不介绍,直接上代码。
static class A implements Runnable {
B b;
@Override
public void run() {
synchronized (b) {
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
synchronized (this) {
System.out.println("A");
}
}
}
}
static class B implements Runnable {
A a;
public B(A a) {
this.a = a;
}
@Override
public void run() {
synchronized (a) {
try {
TimeUnit.MILLISECONDS.sleep(2);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
synchronized (this) {
System.out.println("B");
}
}
}
}
public static void main(String[] args) {
A a = new A();
B b = new B(a);
a.b = b;
new Thread(b).start();
new Thread(a).start();
}
代码中要注意的是sleep的时间,如果没有sleep或两个时间相等,那么运行10次也不一定能形成一次死锁,所以要错开两个线程的时间,这样一个死锁就轻松形成了,去把它写进你的系统吧。
该代码示例展示了如何在Java中创建一个简单的死锁情况。两个线程分别持有对象A和B的锁,并尝试获取对方持有的锁,造成死锁。通过让线程在尝试获取新锁之前短暂睡眠,增加了死锁发生的概率。

被折叠的 条评论
为什么被折叠?



