Java多线程之死锁编码及定位分析
Java多线程之死锁编码及定位分析
目录
- 死锁是什么
- 代码实现
- 死锁解决办法
1. 死锁是什么
死锁是指两个或两个以上的进程在执行过程中因争夺资而造成的一种互相等待的现象,若无外力干涉那它们都将无法推进下去,
如果系统资源允是,进程的资源请求都能够得到满是,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。
2. 代码实现
- 代码实现
import java.util.concurrent.TimeUnit;class HoldLockThread implements Runnable{private String lockA;private String lockB;public HoldLockThread(String lockA, String lockB) {this.lockA = lockA;this.lockB = lockB;}@Overridepublic void run() {synchronized (lockA){System.out.println(Thread.currentThread().getName()+"\t 自己持有:"+lockA+"\t 尝试持有:"+lockB);//暂停一会儿线程try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}synchronized (lockB){System.out.println(Thread.currentThread().getName()+"\t 自己持有:"+lockB+"\t 尝试持有:"+lockA);}}}
}public class DeadLockDemo {public static void main(String[] args) {String lockA = "lockA";String lockB = "lockB";new Thread(new HoldLockThread(lockA,lockB),"ThreadAAA").start();new Thread(new HoldLockThread(lockB,lockA),"ThreadBBB").start();}
}
3. 死锁解决办法
jps命令定位进程号
jstack找到死锁查看
命令: jstack 进程号
显示结果
Java多线程之死锁编码及定位分析相关推荐
- 死锁编码及定位分析(故障排查)
什么是死锁? 在Java中使用多线程,就会有可能导致死锁问题.死锁会让程序一直卡住,不再程序往下执行.我们只能通过中止并重启的方式来让程序重新执行. 造成死锁的原因: 当前线程拥有其他线程需要的资源 ...
- Java - 死锁 Dead Lock 定位分析
文章目录 Pre jstack Thread dump Dead Lock 分析 分析代码 解决 Pre JVM-11虚拟机性能监控与故障处理工具之[JDK的可视化工具-JConsole] jstac ...
- java多线程系列:ThreadPoolExecutor源码分析
前言 这篇主要讲述ThreadPoolExecutor的源码分析,贯穿类的创建.任务的添加到线程池的关闭整个流程,让你知其然所以然.希望你可以通过本篇博文知道ThreadPoolExecutor是怎么 ...
- java多线程系列:ThreadPoolExecutor源码分析,java基础面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- JAVA多线程中join()方法的详细分析
虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客给的例子看起来都像 ...
- JAVA多线程中wait()方法的详细分析
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/119645679 本文出自[赵彦军的博客] 文章目录 wait 和 notify 简 ...
- Java多线程探究-死锁原因
进程死锁及解决办法 一.要点提示 (1) 掌握死锁的概念和产生死锁的根本原因. (2) 理解产生死锁的必要条件--以下四个条件同时具备:互斥条件.不可抢占条件.占有且申请条件.循环等待条件. (3) ...
- Java多线程:线程8锁案例分析
线程8锁案例分析 通过分析代码,推测打印结果,并运行代码进行验证 1.两个线程调用同一个对象的两个同步方法 被synchronized修饰的方法,锁的对象是方法的调用者.因为两个方法的调用者是同一个, ...
- Java多线程p22 死锁
p22 死锁 package kuang.thread;public class DeadLock {//需要的资源只有一份,用static来保证只有一份public static void main ...
最新文章
- iOS开发入门知识归纳
- CTF-window和linux下命令执行的知识
- (八)React原理
- Jupyter 安装使用
- matlab程序 地震 相干噪声_地震台站台基噪声功率谱概率密度函数Matlab实现
- Android4.0设置界面修改总结
- php钩子是啥意思,thinkphp钩子是什么意思
- MATLAB信号处理之信号的采样
- ADO.NET如何读取Excel(转自晓风残月)
- 腾讯云IM集成(so easy)
- 2016,轻轻地你走了,正如你轻轻地来,2017新年快乐
- 均方误差——MSE 和标准差 的区别
- [vijos P1391] 想越狱的小杉
- 初始脚本一键搞定虚拟机
- 数据结构——数和二叉树的概念和结构
- LeetCode 1053
- Git操作指南及工作流程(初学者必看)
- python【数据结构与算法】流水线作业调度Johnson启发式算法
- CPU分析系列--sysstat(mpstat+pidstat)分析系统CPU和I/O负载
- 高德地图 Web JS API示例学习笔记(3)——地图(三维地图)
热门文章
- 彻底理解ThreadLocal
- 用css3制作旋转加载动画的几种方法
- hibernate JPA 双向多对多 bi-directional many-to-many association
- Smarty的assign定义变量
- CodeForces - 1553F Pairwise Modulo(数论+树状数组)
- AtCoder - arc120_c Swaps 2(思维+线段树+模拟)
- CodeForces - 1333C Eugene and an array(尺取)
- python输入一组数字存到列表_Python如何使用输入传递多个值并将它们存储在一个列表中(简单版本),python,怎么,input,传入,储存,到...
- Visio矢量图导出教程
- 排序算法-04快速排序(Python实现)