一、死锁模拟代码
public class MonitoringTest {
static class SysnAdd implements Runnable {
int a;
int b;
public SysnAdd(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public void run() {
synchronized(Integer.valueOf(a)) {
synchronized(Integer.valueOf(b)) {
System.out.println(a + b);
try {
// 此处等待很关键,由于方法执行太快,导致不出现死锁
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
new Thread(new SysnAdd(1, 2)).start();
new Thread(new SysnAdd(2, 1)).start();
}
}
}
二、JConsole死锁检测截图
三、JConsole默认情况下无法连接,解决方法
添加VM参数
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8011
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false