一、JConsole简介
- 从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码
二、JConsole使用
1、命令行启动
- 要求:需要配置好JDK的环境目录
- 然后在cmd命令行直接执行命令即可,如jps
2、GUI shell启动
- 找到JDK 安装路径,打开bin文件夹,双击jconsole
三、监测死锁程序
1、死锁代码
package com.sjyl.thread;
class ThreadDemo02 implements Runnable {
private volatile static int count = 100;
private static Object oj = new Object();
public boolean flag = true;
public void run() {
if (flag) {
while (count > 0) {
synchronized (oj) {
try {
Thread.sleep(10);
} catch (Exception e) {
}
sale();
}
}
} else {
while (count > 0) {
sale();
}
}
}
public synchronized void sale() {
synchronized (oj) {
try {
Thread.sleep(10);
} catch (Exception e) {
}
if (count > 0) {
System.out.println(Thread.currentThread().getName() + ",出售" + (100 - count + 1) + "张票");
count--;
}
}
}
}
public class Test0002 {
public static void main(String[] args) throws InterruptedException {
ThreadDemo02 threadDemo02 = new ThreadDemo02();
Thread t1 = new Thread(threadDemo02, "窗口1");
Thread t2 = new Thread(threadDemo02, "窗口2");
t1.start();
Thread.sleep(40);
threadDemo02.flag = false;
t2.start();
}
}
2、分析死锁程序
- 运行死锁代码后,在JConsole中选择对应的Test000程序,连接 -> 不安全的连接(不需要使用SSL)
3、检测图
4、线程检测
四、死锁问题分析
- 在Test0002中我们有2个线程:窗口1,窗口2
- 在JConsole的线程窗口中,我们可以查看窗口1和窗口2这2个线程的信息
- 发现“已锁定”,并且提示了在java中的行数“com.sjyl.ThreadDemo02.run(Test0002.java:18)”
五、VusualVM分析工具
- 工具路径和JConsole一样的,都是在JDK的bin目录下
1、监视
2、死锁