Java多线程之死锁编码及定位分析 系统管理员 2022-04-25 08:46 166阅读 0赞 # Java多线程之死锁编码及定位分析 # -------------------- ## 目录 ## 1. 死锁是什么 2. 代码实现 3. 死锁解决办法 -------------------- ### 1. 死锁是什么 ### 死锁是指两个或两个以上的进程在执行过程中因争夺资而造成的一种互相等待的现象,若无外力干涉那它们都将无法推进下去, 如果系统资源允是,进程的资源请求都能够得到满是,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTkxMDY5NA_size_16_color_FFFFFF_t_70] ### 2. 代码实现 ### 1. 代码实现 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; } @Override public 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. 死锁解决办法 ### -------------------- 1. jps命令定位进程号 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTkxMDY5NA_size_16_color_FFFFFF_t_70 1] 2. jstack找到死锁查看 命令: `jstack 进程号` 显示结果 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTkxMDY5NA_size_16_color_FFFFFF_t_70 2] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTkxMDY5NA_size_16_color_FFFFFF_t_70]: /images/20220125/03cd05852cf4477797379715b9abf3d2.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTkxMDY5NA_size_16_color_FFFFFF_t_70 1]: /images/20220125/29ac0ed885fa4ccb99c1f49562cc8872.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTkxMDY5NA_size_16_color_FFFFFF_t_70 2]: /images/20220125/efde2d1d6cd4456ebd1f1642ed936d3d.png
相关 Java多线程同步:死锁、活锁及实例分析 在Java多线程编程中,同步机制是保证线程安全的重要手段。其中,死锁、活锁是两种常见的线程同步问题。 1. 死锁(Deadlock): - 定义:两个或多个线程在执行过 冷不防/ 2024年09月13日 11:00/ 0 赞/ 22 阅读
相关 Java多线程:死锁实例分析 在Java多线程编程中,死锁是一种常见的问题。简单来说,死锁发生时,两个或更多的线程因争夺资源而造成的一种互相等待的现象,且这种状态无法通过各自释放已获取的资源来打破。 下面 迷南。/ 2024年09月12日 06:18/ 0 赞/ 21 阅读
相关 多线程之死锁 目录: 1.什么是死锁? 2.可重入与不可重入 3.发生死锁的三个典型情况 4.发生死锁的四个必要条件 5.如何破除死锁? -------------------- 谁践踏了优雅/ 2024年03月30日 10:44/ 0 赞/ 48 阅读
相关 死锁编码及定位分析 一、死锁 死锁是指两个或两个以上进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉它们都将无法推进下去。 二、死锁代码案例 packag 清疚/ 2023年01月20日 08:12/ 0 赞/ 87 阅读
相关 Java多线程 定位死锁--ThreadMXBean 文章目录 定位死锁--ThreadMXBean 定位死锁–ThreadMXBean 使用`ThreadMXBean` 可以检测程序中出现死锁的线 Myth丶恋晨/ 2022年12月06日 01:30/ 0 赞/ 192 阅读
相关 Java多线程 定位死锁--jstack 文章目录 jstack定位死锁 两个线程死锁分析 多个线程死锁分析 jstack定位死锁 死锁发生的 缺乏、安全感/ 2022年12月05日 15:15/ 0 赞/ 148 阅读
相关 Java线程之如何分析死锁及避免死锁 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ub 迷南。/ 2022年05月28日 06:56/ 0 赞/ 429 阅读
相关 Java多线程之死锁编码及定位分析 Java多线程之死锁编码及定位分析 -------------------- 目录 1. 死锁是什么 2. 代码实现 3. 死锁解决办法 -------- 系统管理员/ 2022年04月25日 08:46/ 0 赞/ 167 阅读
相关 多线程死锁实例与定位 既然可以上锁,那么假如有2个线程,一个线程想先锁对象1,再锁对象2,恰好另外有一个线程先锁对象2,再锁对象1。在这个过程中,当线程1把对象1锁好以后,就想去锁对象2,但是不巧, 淡淡的烟草味﹌/ 2022年03月26日 05:22/ 0 赞/ 237 阅读
还没有评论,来说两句吧...