李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
死锁编码及定位分析
Leefs
2020-03-03 PM
1344℃
0条
# 死锁编码及定位分析 ### 概念 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。 ![41.死锁编码及定位分析01.jpeg][1] ### 代码示例 ```java class DeadLockResource implements Runnable{ private String LockA; private String LockB; public DeadLockResource(String LockA,String LockB){ this.LockA = LockA; this.LockB = LockB; } @Override public void run() { synchronized(LockA){ System.out.println(Thread.currentThread().getName() + "\t 拥有" + LockA + ",试图获取" + LockB); synchronized (LockB){ System.out.println(Thread.currentThread().getName() + "\t 拥有" + LockB + ",试图获取" + LockA); } } } } public class DeadLockDemo{ public static void main(String[] args) { String LockA = "LockA"; String LockB = "LockB"; new Thread(new DeadLockResource(LockA,LockB),"ThreadA").start(); new Thread(new DeadLockResource(LockB,LockA),"ThreadB").start(); } } ``` **运行结果** ``` ThreadA 拥有LockA,试图获取LockB ThreadB 拥有LockB,试图获取LockA ``` **运行结果分析** ThreadA持有LockA,视图获取LockB;而ThreadB持有LockB,视图获取LockA;造成两个线程相互等待,又没有外力干涉,无法推进下去,最终导致死锁 现象。 ### 死锁定位分析 > + 1.Linux环境下查看进程:ps -ef | grep java 或者 jps-l > > + 2.Windows环境下查看java进程:jps -l > > + 3.Windows环境下查看死锁栈信息:jstack+进程号 第一步:使用jps -l查看运行的java进程号 ![41.死锁编码及定位分析02.jpeg][2] 第二步:使用jstack+进程号查看死锁栈信息 ![41.死锁编码及定位分析03.jpeg][3] ThreadA 和 ThreadB 相互等待对方拥有的锁资源: ThreadA持有锁locked <0x00000000d61a3cb0> ,但是等待锁waiting to lock <0x00000000d61a3ce8> ThreadB持有锁locked <0x00000000d61a3ce8>,但是等待锁waiting to lock <0x00000000d61a3cb0> [1]: https://lilinchao.com/usr/uploads/2020/03/1651860372.jpeg [2]: https://lilinchao.com/usr/uploads/2020/03/3474342960.jpeg [3]: https://lilinchao.com/usr/uploads/2020/03/2424466525.jpeg
标签:
锁
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/682.html
上一篇
post请求方式分析
下一篇
GET和POST两种基本请求方法的区别
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
43
标签云
数学
Redis
机器学习
算法
高并发
GET和POST
Hbase
Golang
LeetCode刷题
Quartz
线程池
JavaScript
BurpSuite
Elastisearch
Spark SQL
序列化和反序列化
并发编程
Scala
FileBeat
CentOS
Jenkins
SpringCloud
Spark RDD
Flink
Docker
散列
工具
Jquery
Elasticsearch
Typora
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞