【深入理解Java虚拟机】笔记3:JConsole死锁代码示例

版权声明:本文为个人学习总结,欢迎转载,转载时请附加原文链接 https://blog.csdn.net/cockroach02/article/details/87556906

一、死锁模拟代码

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死锁截图
三、JConsole默认情况下无法连接,解决方法
添加VM参数

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8011 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false

参考链接:Windows下Jconsole无法连接到进程

猜你喜欢

转载自blog.csdn.net/cockroach02/article/details/87556906