Windows

打开cmd,输入jconsole命令

测试代码

  1. public class ThreadSleep {
  2. public static void main(String[] args) {
  3. //countdown();
  4. // 打印当前时间
  5. Date date = new Date(System.currentTimeMillis());
  6. while (true) {
  7. try {
  8. Thread.sleep(1000);
  9. System.out.println(new SimpleDateFormat("HH:mm:ss").format(date));
  10. date = new Date(System.currentTimeMillis());
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }
  16. }

image.png

image.png

死锁演示

  1. public class JConsoleThreadLock {
  2. /**
  3. * 线程死锁等待演示
  4. */
  5. static class SynAddRunalbe implements Runnable {
  6. int a, b;
  7. public SynAddRunalbe(int a, int b) {
  8. this.a = a;
  9. this.b = b;
  10. }
  11. @Override
  12. public void run() {
  13. synchronized (Integer.valueOf(a)) {
  14. synchronized (Integer.valueOf(b)) {
  15. System.out.println(a + b);
  16. }
  17. }
  18. }
  19. }
  20. public static void main(String[] args) {
  21. for (int i = 0; i < 100; i++) {
  22. new Thread(new SynAddRunalbe(1, 2)).start();
  23. new Thread(new SynAddRunalbe(2, 1)).start();
  24. }
  25. }
  26. }

image.png

Linux

需要以如下方式运行你的 java 类

  1. java -Djava.rmi.server.hostname=`ip地址` -Dcom.sun.management.jmxremote -
  2. Dcom.sun.management.jmxremote.port=`连接端口` -Dcom.sun.management.jmxremote.ssl=是否安全连接 -
  3. Dcom.sun.management.jmxremote.authenticate=是否认证 java

修改 /etc/hosts 文件将 127.0.0.1 映射至主机名
如果要认证访问,还需要做如下步骤

  • 复制 jmxremote.password 文件
  • 修改 jmxremote.password 和 jmxremote.access 文件的权限为 600 即文件所有者可读写
  • 连接时填入 controlRole(用户名),R&D(密码)