我们经常会遇到java程序遇死锁的问题,也会经常遇到。
案例
以下是案例代码:
package com.dzend.mall.order;
public class JstackLockDemo {
public static final int initData =666;
public static User user = new User();
public int compute(){
int a=1;
int b=2;
int c=(a+b)*10;
return c;
}
public static void main(String[] args) {
JstackLockDemo jstackLockDemo = new JstackLockDemo();
while(true) {
jstackLockDemo.compute();
}
}
}
class User{
private int id;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
一、运行这个程序JstackLockDemo
二、用jps找出当前的pid
pid为1836
三、启动Process Explorer
1、下载地址:
2、下载完,启动程序
3、找到pid为1836的进程,右键properties
4、查找到cpu资源使用高的的线程,线程ID:23396
四、用jstack工具收集该进程日志
1、在命令行输入
jstack 1836 > d://1836.out
2、到d盘去查看,已经保存了1836.out
3、用记事本打开查看详细信息
把23396转化成16进制的5b64,用查找5b64
就能看到第19行的代码有问题,再进一步分析