使用jconsole和jvisualvm可视化检测死锁
- step1:写死锁
- step2:检测死锁
死锁程序:
package demo2;
public class DeadLock extends Thread{
private String name;
public DeadLock(String name) {
this.name = name;
}
@Override
public void run() {
synchronized (this.name) {
if(this.name.equals("张三")){
synchronized ("筷子") {
System.out.println(Thread.currentThread().getName() + ": " + this.name + "拿到了筷子");
synchronized ("碗") {
System.out.println(Thread.currentThread().getName() + ": " + this.name + "拿到了碗");
System.out.println(Thread.currentThread().getName() + ": 开开心心吃饭饭");
}
}
}else if(this.name.equals("李四")){
synchronized ("碗") {
System.out.println(Thread.currentThread().getName() + ": " + this.name + "拿到了碗");
synchronized ("筷子") {
System.out.println(Thread.currentThread().getName() + ": " + this.name + "拿到了筷子");
System.out.println(Thread.currentThread().getName() + ": 开开心心吃饭饭");
}
}
}
}
}
public static void main(String[] args) {
DeadLock t0 = new DeadLock("张三");
t0.setName("张三的线程");
DeadLock t1 = new DeadLock("李四");
t1.setName("李四的线程");
t0.start();
t1.start();
}
}
死锁结果:
本来想要的结果:
在平时的程序中,如果涉及到死锁的问题,难免需要去检测一下,在JDK中有两个工具,jconsole是Sun公司之前写的,jvisualvm是后期Oracle开发的,都可以使用,灰常的好用。
jconsole:
工具路径:D:\Java\jdk1.7.0_72\bin\
选中你的运行进程,进行连接
选中进程窗口,点击检测死锁
扫描二维码关注公众号,回复:
1025748 查看本文章
检测结果,死锁,以及其死锁线程
jvisualvm:
界面还是很友好的,和jconsole差不多,但是可以生成详细的Dump