面试题:使用java写一个死锁案例
参考网址:
https://mp.weixin.qq.com/s/rpgZ_NosiNRjeHk6ivFQPg
说明:
这篇帖子就很干脆,直接上代码,不多bb
package com.shaoming;
/**
* @ClassName: DeadLockExample
* @Author: 邵明
* @Date: 2021/9/13 10:25
* @Description:
*/
public class DeadLockExample {
public static void main(String[] args) {
Object lockA = new Object(); // 创建锁 A
Object lockB = new Object(); // 创建锁 B
Thread t1 = new Thread(
new Runnable() {
@Override
public void run() {
//先获取锁A
synchronized (lockA) {
System.out.println("线程 1:获取到锁 A!");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
//尝试获取锁B
System.out.println("线程 1:等待获取B...");
synchronized (lockB){
System.out.println("线程 1:获取到锁 B!");
}
}
}
}
);
t1.start();
// 创建线程 2
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
// 先获取锁 B
synchronized (lockB) {
System.out.println("线程 2:获取到锁 B!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 尝试获取锁 A
System.out.println("线程 2:等待获取 A...");
synchronized (lockA) {
System.out.println("线程 2:获取到锁 A!");
}
}
}
});
t2.start(); // 运行线程
}
}
控制台打印
线程 1:获取到锁 A!
线程 2:获取到锁 B!
线程 1:等待获取B…
线程 2:等待获取 A…
个人csdn博客网址:https://blog.csdn.net/shaoming314
![jam](https://i-blog.csdnimg.cn/blog_migrate/902f9ea4e6285ceba0d18af8e9857bb2.jpeg)
个人博客网址:www.shaoming.club
![halo](https://i-blog.csdnimg.cn/blog_migrate/c2c1dd5b4b71e544d16229a48274dce9.jpeg)
s://gitee.com/shao_ming314/picture/raw/master/image/halo.jpg" alt=“halo” style=“zoom:33%;” />