思路
如下图,现在我们有两个资源分别是资源a,和资源b,这两个资源都是加锁的,现在有线程a和线程b去分别访问a资源和b资源,
在访问的过程中呢 再进行互相调用,但是呢 a和b两个资源都是处于加锁状态下,这样a线程去调b资源的时候就会等待b资源,
同时呢 b线程要调用a资源也拿不到,这样两个线程就发生了死锁
下面是代码实现
定义两个临界资源并加锁
public class Deadlock implements Runnable{
//创建两个临界资源
private Object obj1;
private Object obj2;
public Deadlock(Object obj1,Object obj2){
this.obj1 = obj1;
this.obj2 = obj2;
}
@Override
public void run() {
synchronized (obj1){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (obj2){
System.out.println("Hello");
}
}
}
}
写一个调用的测试方法
public class Main {
public static void main(String[] args) {
Object obj1 = new Object();
Object obj2 = new Object();
new Thread(new Deadlock(obj1,obj2)).start();
new Thread(new Deadlock(obj2,obj1)).start();
}
}