宋子宪博客

java死锁检测工具使用方法

产生死锁的原因

所谓死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象.互相抢占对方的锁,若无外力作用,它们都将无法推进下去

示例代码

/**
 * <p>
 * Description:
 * </p>
 *
 * @author songzixian
 * @version v2.0.0
 * @create 2021-08-15 14:25
 * @see com.songzixian.thread
 */
public class ThreadCount03 implements Runnable{

    private static int count = 100;

    private String lock = "lock";

    @Override
    public void run() {
        //死锁演示
        while (true){
            count++;
            if (count % 2 ==0){
                synchronized (lock){
                    a();
                }
            }else {
                synchronized (this){
                    b();
                }
            }
        }
    }

    public synchronized void a(){
        System.out.println(Thread.currentThread().getName()+"----a方法抢到了锁");
    }
    public synchronized void b(){
        synchronized (lock){
            System.out.println(Thread.currentThread().getName()+"----b方法抢到了锁");
        }
    }


    public static void main(String[] args) {
        ThreadCount03 t1 = new ThreadCount03();
        new Thread(t1).start();
        new Thread(t1).start();
    }
    
}

检测死锁

Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到jconsole.exe程序。它用于连接正在运行的本地或者远程的JVM,对运行在Java应用程序的资源消耗和性能进行监控,并画出大量的图表,提供强大的可视化界面。而且本身占用的服务器内存很小,甚至可以说几乎不消耗。双击打开程序

弹出以下界面,可以选择本地检测也可以远程操作服务器上的死锁

选择不安全的链接

选择线程

然后检测死锁

然后就可以看到死锁的线程

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »