1. 一天,程序员小灰失恋喝醉酒,写了一段死循环,然后若无其事地跑去睡觉了
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
while(true){
System.out.println(Thread.currentThread().getName() + "跑起来!!!");
}
}
});
t1.setName("测试线程卢本伟1号");
t1.start();
}
}
2. 本线程结果
3. 第二天,测试部的小黄查看任务管理器,发现有个Java线程消耗cpu激增
4. 小黄屁颠屁颠地找到主程小黑,让小黑找到问题所在,大黑根据上面截图,发现java.exe的pid是15564,然后打开process exporer工具,找到了该 "进程"
5. 双击,打开改线程的属性界面,找到了cpu消耗最高的 "线程" TID是11660(10进制)
6. 接着win + r > calc > 打开计算器,换算11660(10) > 2D8C(16),即0x2D8C(16进制自带0x)
7. 接着,小黑打开了jdk > bin > j visual VM,找到了pid15564,也就是我们找到的进程
8. 然后点开dump打印线程运行情况
9.在dump里,我们找到了nid=0x2d8c的线程,这就是我们一步一步定位,找到的目标,而通过下图的分析,我们可找到Main类第9行代码
10. 打开项目,找到了这行代码,问题的源头!!!