死锁问题排查
代码示例:
public class Test002 { private static Object lock1 = new Object(); private static Object lock2 = new Object(); public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { synchronized (lock1) { try { System.out.println("Thread 1 start "); Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock2) { System.out.println("Thread 1 end"); } } } }).start(); new Thread(new Runnable() { @Override public void run() { synchronized (lock2) { try { System.out.println("Thread 2 start "); Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (lock1) { System.out.println("Thread 2 end"); } } } }).start(); } }
我们使用jvisualvm进行查看,可以直接到死信息,如下图
查看dump信息,很明确的提示了在那里等锁信息。如下: