多语言展示
当前在线:1963今日阅读:142今日分享:25

java程序中如何检测死锁

java使用多线程的过程中,经常会遇到死锁,导致服务卡死或者是崩溃的情况。如果有2个线程,为了解决资源的竞争,各自持有一把锁,出现互相等待的情况,这个时候就会出现死锁
工具/原料
1

java

2

jstack

方法/步骤
1

首先看一个导致死锁的例子,再结合例子说明下如何检查死锁,避免死锁的情况package cn.sw.study.common.test;/** * 死锁例子 * Created by shaowei on 2017/1/3. */public class DeadLock {    public static void main(String[] args) {        final Object a = new Object();        final Object b = new Object();        new Thread() {            @Override            public void run() {                try {                    synchronized (a) {                        System.out.println('T1 got the lock of a');                        Thread.sleep(1000);                        System.out.println('T1 was trying to get the lock of b');                        synchronized (b) {                            System.out.println('T1 one win');                        }                    }                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }.start();        new Thread() {            @Override            public void run() {                try {                    synchronized (b) {                        System.out.println('T2 two got the lock of b');                        Thread.sleep(1000);                        System.out.println('T2 was trying to get the lock of a');                        synchronized (a) {                            System.out.println('T2 win');                        }                    }                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }.start();    }}

3

打开cmd命令窗口,输入jsp命令,可以看到java的进程id列表,找到刚刚启动的例子进程id

4

再输入jstack 进程ID,可以看到所有的线程栈

5

栈列表最下方,可以看到Found one Java-level deadlock,打印出来的就是我们例子中两个互相等待锁的地方

6

通过上面jstack的方法,我们可以用来检查任意java进程的程序中死锁的情况。除了命令行的方式,我们还可以通过jdk自带的图形化工具来查看,打开jdk的bin目录,双击打开jvisualvm.exe

7

在左边列表中,同样需要找到刚刚启动例子的进程,然后双击打开

8

再选择线程tab标签,可以看到有红字显示检测到死锁,点击线程Dump可以查看详情

注意事项

jdk自带的图形化工具比命令行方式直观方便,但如果是远程服务器监测,则需要借助jmx连接或jstatd连接

推荐信息