Java锁 死锁及排查 JVM 工具 jconsole 工具 排查死锁
目录
概述
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力于涉那它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足。
死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。
死锁案例 (面试)
import java.util.concurrent.TimeUnit;
public class DeadLockDemo {
// 展示死锁
static Object lockA = new Object();
static Object lockB = new Object();
public static void main(String[] args) {
new Thread(() ->{
synchronized (lockA){
System.out.println(Thread.currentThread().getName()+"\t"+"自己持有A锁 期待获得B锁");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB){
System.out.println(Thread.currentThread().getName()+"\t"+"在自己持有A锁的情况下 获取了B锁");
}
}
},"a").start();
new Thread(() ->{
synchronized (lockB){
System.out.println(Thread.currentThread().getName()+"\t"+"自己持有A锁 期待获得B锁");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockA){
System.out.println(Thread.currentThread().getName()+"\t"+"在自己持有A锁的情况下 获取了B锁");
}
}
},"b").start();
}
}
死锁
如何排查死锁
使用 JVM 工具排查死锁
用 jps 查找进程信息
jps -l
用 jstack 追踪堆栈信息
jstack 48660
使用 jconsole 工具排查死锁
运行死锁
打开 Java 监视和管理控制台
检测死锁
细节
不可以 String 一把锁
原文地址:https://blog.csdn.net/qq_30500575/article/details/145246035
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!