当前位置: 首页 > news >正文

Java死锁

什么是死锁?

多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。

死锁的必要条件:

1、互斥条件:该资源任意一个时刻只由一个线程占用。

2、请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放。

3、不剥夺条件:线程已获得的资源在未使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才释放资源。

4、循环等待条件:若干线程之间形成一种头尾相接的循环等待资源关系。

如何预防死锁? 破坏死锁的产生的必要条件即可:

  1. 破坏请求与保持条件

    一次性申请所有的资源。

    先释放后申请。

  2. 破坏不剥夺条件

    占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源。

    设置线程优先级,优先级高的可以抢占资源。

  3. 破坏循环等待条件

    靠按序申请资源来预防。按某一顺序申请资源,释放资源则反序释放。

如何判断是否死锁

1、jstack 进程号

使用jps查看Java进程编号,然后使用jstack查看进程信息,出现下述信息表示出现了死锁。jstack会在最后给出进程的分析信息,表示出现了死锁。

2、图形化工具jconsole.exe

选择要检测的程序,点击检测死锁。

http://www.lryc.cn/news/30645.html

相关文章:

  • BloomFilter原理学习
  • C语言老题新解第1-5题
  • 【数据库系列】MQSQL历史数据分区
  • MyBatis常用的俩种分页方式
  • RPC通信原理解析
  • 【蓝桥杯集训·周赛】AcWing 第93场周赛
  • 蓝桥杯-刷题统计
  • Linux入门教程||Linux Shell 变量|| Shell 传递参数
  • [算法和数据结构]--回溯算法之DFS初识
  • 【LeetCode每日一题】——680.验证回文串 II
  • 【C语言进阶:指针的进阶】你真分得清sizeof和strlen?
  • 【前端必看】极大提高开发效率的网页 JS 调试技巧
  • 【春招面经】视源股份前端一面
  • 插件化开发入门
  • tftp、nfs 服务器环境搭建
  • 汇编系列03-不借助操作系统输出Hello World
  • TPU编程竞赛系列|算能赛道冠军SO-FAST团队获第十届CCF BDCI总决赛特等奖!
  • 【C++】AVL树,平衡二叉树详细解析
  • C/C++开发,无可避免的多线程(篇四).线程与函数的奇妙碰撞
  • elisp简单实例: taglist
  • Azure AI基础到实战(C#2022)-认知服务(3)
  • aws apigateway 使用restapi集成lambda
  • HTML基础
  • ThreadPoolExecutor参数 keepAliveTime allowCoreThreadTimeOut
  • 什么是Hibernate框架?
  • 指针面试笔试题练习
  • docker(三)仓库的搭建、官方私有仓库的加密和认证
  • FPGA实现SDI视频编解码 SDI接收发送,提供2套工程源码和技术支持
  • Android 基础知识4-3.5 RadioButton(单选按钮)Checkbox(复选框)详解
  • 用代码实现解析解的方式求解_梯度下降法思路_导函数有什么用_接23节---人工智能工作笔记0026