线程的死锁【了解】

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

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

解决办法:重启

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

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.存在锁对象的循环依赖

相关推荐
秋天的怀念_David2 分钟前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
外收内放10 分钟前
Python基础语法练习题(73)
java·前端·python
Wang's Blog14 分钟前
Java 项目实战: 交友项目 - 环信后台发送消息测试
java·交友
用户37215742613539 分钟前
Java 操作 Word 脚注和尾注:添加、读取与删除
java
小嘉丶学长1 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
字节探索1 小时前
Spring Boot 接口幂等性设计:从唯一索引到 Redis+Lua 的工程实践
java·spring boot
用户3721574261351 小时前
Java 实现 Excel 与 Markdown 相互转换:表格导出、格式设置与多表提取
java
迪菲赫尔曼1 小时前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测
SL_staff1 小时前
制造业订单交付总踩坑?用结构化节点协同模型重构计划系统
java·开源·全栈
chari克里2 小时前
QT5.15.2 + msvc2022部署全流程说明(windows可联网环境)
开发语言·c++·qt