李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
死锁编码及定位分析
Leefs
2020-03-03 PM
1708℃
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://lilinchao.com/archives/682.html
上一篇
post请求方式分析
下一篇
GET和POST两种基本请求方法的区别
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
MySQL
Spark Streaming
二叉树
SQL练习题
VUE
Nacos
Spark RDD
gorm
Golang基础
Eclipse
ajax
序列化和反序列化
栈
Elastisearch
Zookeeper
nginx
微服务
持有对象
人工智能
Java工具类
JavaWeb
SpringBoot
Ubuntu
MyBatis-Plus
Spark Core
Tomcat
数据结构和算法
JavaScript
Java编程思想
并发编程
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭