线程的死锁【了解】

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

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

解决办法:重启

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

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

相关推荐
vx_Biye_Design4 分钟前
springboot游泳馆系统93765-计算机课程设计、毕业设计
java·javascript·spring boot·后端·python·spring·课程设计
名字还没想好☜8 分钟前
Java NIO ByteBuffer 实战:flip/clear/compact 三个绕晕人的方法与 position/limit 心智模型
java·开发语言·后端·spring·nio
Wang's Blog24 分钟前
Java框架快速入门: Spring Security+OAuth2之短信服务多供应商动态切换(阿里云与LeanCloud)
java·spring·阿里云
Doubbbbbbble云31 分钟前
区间合并问题的常见算法模式与优化思路4
java·数据结构·算法
小溪学编程34 分钟前
AQS 原理详解:从 CLH 队列到 ReentrantLock 的实现
java·开发语言
持敬chijing36 分钟前
Web前后端开发-JavaScript 入门教程
开发语言·前端·javascript
蜗牛互联网42 分钟前
语音AI开始边听边说,改变的不只是响应速度
java·人工智能·后端·语音识别
2601_966949651 小时前
从轮询到策略消费:量化系统如何高效处理五档盘口数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
卓怡学长1 小时前
w233基于vue和springboot的宠物管理系统的设计与实现
java·vue.js·spring boot·spring·intellij-idea
我命由我123451 小时前
人脸识别 - 去重时间窗口
java·开发语言·python·学习·java-ee·学习方法·python3.11