zoukankan      html  css  js  c++  java
  • 如何查看Java进程发生了死锁?

    运行一个Java程序, 发生了死锁, 如何查看?

    运行以下程序发生死锁

    public class DeadLockTest {
     
    	public static void main(String[] args) {
    		new Thread(new Runnable() {
    			
    			@Override
    			public void run() {
    				synchronized (B.class) {
    					try {
    						Thread.sleep(1000);
    					} catch (InterruptedException e) {
    						e.printStackTrace();
    					}
    					synchronized (A.class) {
    						
    					}
    				}
    			}
    		}).start();
    		new Thread(new Runnable() {
    			
    			@Override
    			public void run() {
    				synchronized (A.class) {
    					try {
    						Thread.sleep(1000);
    					} catch (InterruptedException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    					synchronized (B.class) {
    						
    					}
    				}
    				
    			}
    		}).start();
    	}
    	
    }
    class A {
    	
    }
     
    class B {
    	
    }
    

    查看死锁方法一:

    打开%JAVA_HOME%/bin/jconsole.exe,

    image-20210409122232936 image-20210409122313725

    看这两个线程互相锁住的和阻塞的资源, 就能判断发生了死锁。

    查看死锁方法二:

    使用jps命令先查看进程号

    image-20210409122457224

    然后运行jstack -l 2340

    image-20210409122623738

    如图, 发生了死锁。

  • 相关阅读:
    CF1354D
    Keiichi Tsuchiya the Drift King
    二分查找[搬运链接]
    树状数组的修炼 疑惑篇
    离线
    关于二维差分和二维前缀和的注意事项
    QWORD PTR [rcx],0x0 ??
    字典树
    数据库题
    需要掌握的技能汇总
  • 原文地址:https://www.cnblogs.com/chenrj97/p/14636619.html
Copyright © 2011-2022 走看看