线程的死锁【了解】

避免:两个线程中不要交叉使用锁【不嵌套使用锁】

线程的死锁:就是两个线程交叉在一起了,无法解绑【简单来说 : 同步代码块的锁进行嵌套使用 , 就会大概率产生死锁】

解决办法:重启

如代码:运行卡了,但不停止程序

java 复制代码
public class DeadLockDemo {
    public static void main(String[] args) {
        String 筷子A = "筷子A";//第1个锁对象
        String 筷子B = "筷子B";//第2个锁对象


        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    //以下代码中使用了:嵌套锁 (先拿A锁,再拿B锁)
                    synchronized (筷子A) {
                        System.out.println("小白拿到了筷子A ,等待筷子B....");
                        synchronized (筷子B) {
                            System.out.println("小白拿到了筷子A和筷子B , 开吃!!!!!");
                        }
                    }
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }, "小白").start();


        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    synchronized (筷子B) {
                        System.out.println("小黑拿到了筷子B ,等待筷子A....");
                        synchronized (筷子A) {
                            System.out.println("小黑拿到了筷子B和筷子A , 开吃!!!!!");
                        }
                    }
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }, "小黑").start();
    }
}

死锁产生的条件分析:

1.多个线程

2.存在锁对象的循环依赖

相关推荐
折哥的程序人生 · 物流技术专研14 小时前
第4篇:Lambda 简化策略模式(Java 8+)
java·设计模式·策略模式·函数式编程·lambda·代码简化·扩充系列
researcher-Jiang15 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
西门吹-禅16 小时前
java springboot N+1问题
java·开发语言·spring boot
DLYSB_16 小时前
生命通道:如何用 HIS 医疗系统直连网络声光终端,打造“零延误”的危急值响应网关?
java·网络·数据库·报警灯
skywalk816316 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
weixin_BYSJ198717 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
AI小码17 小时前
LLM 应用的缓存工程:当每次 API 调用都在燃烧成本
java·人工智能·spring·计算机·llm·编程·api
Hui Baby17 小时前
Spring Security
java·后端·spring
IT笔记18 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
2zcode18 小时前
免费开源项目文档:基于MATLAB卷积神经网络的口罩佩戴检测系统
开发语言·matlab·cnn