import java.util.concurrent.locks.ReentrantLock;
public class DeadLockDemo {
static ReentrantLock lock1 = new ReentrantLock();
static ReentrantLock lock2 = new ReentrantLock();
static Thread threadA;
static Thread threadB;
public static void main(String[] args) throws InterruptedException {
threadA = new Thread(new Runnable() {
@Override
public void run() {
lock1.lock();
System.out.println("A 获取 lock1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
lock1.unlock();
throw new RuntimeException(e);
}
while (!lock2.tryLock()) {
if(Thread.interrupted()) {
lock1.unlock();
return;
}
//System.out.println("A 获取 lock2失败");
}
System.out.println("A 获取所有资源");
lock2.unlock();
lock1.unlock();
}
});
threadB = new Thread(new Runnable() {
@Override
public void run() {
lock2.lock();
System.out.println("B 获取 lock2");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
lock2.unlock();
throw new RuntimeException(e);
}
while (!lock1.tryLock()) {
if (Thread.interrupted()) {
lock2.unlock();
return;
}
//System.out.println("B 获取 lock1失败");
}
System.out.println("B获取所有资源");
lock1.unlock();
lock2.unlock();
}
});
threadA.start();
threadB.start();
Thread.sleep(5000);
System.out.println("开始解除死锁");
recovery();
}
public static void recovery() {
threadA.interrupt();
}
}
模拟死锁的产生与解除
最新推荐文章于 2023-05-22 08:34:55 发布