jvm出问题怎么办:这几款 JVM 故障诊断处理工具
jvm出问题怎么办:这几款 JVM 故障诊断处理工具public static void main(String[] args) throws IOException InterruptedException {while (true) ;}线程一直处于运行状态,从堆栈追踪里可以看出代码一直停留在了191行,在空循环上用尽分配的执行时间「锁等待」public static void main(String[] args) throws IOException InterruptedException {Thread thread = createLockThread(new Object);thread.join;}public static Thread createLockThread(final Object lock) {Thread lockThread = new Thread( -> {synchronized (l
-
线程 本页的功能相当于命令行工具jstack,主要是用于检查什么原因导致线程长时间等待,我们写程序来演示下等待外部资源、锁等待、死循环这几种请求
「等待外部资源」
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println(reader.readLine);
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace;
}
}
选中main线程,右侧会看到当前线程运行到了readBytes,等待键盘输入
当我们在控制台输入之后再次查看main线程的状态,此时进入了TIME_WAIT状态
「锁等待」
public static void main(String[] args) throws IOException InterruptedException {
Thread thread = createLockThread(new Object);
thread.join;
}
public static Thread createLockThread(final Object lock) {
Thread lockThread = new Thread( -> {
synchronized (lock) {
try {
lock.wait;
} catch (InterruptedException e) {
e.printStackTrace;
}
}
} "lockThread");
lockThread.start;
return lockThread;
}
lockThread线程在等待lock对象的notify方法被调用,此时处于WAITING状态,在被唤醒之前是不会再分配执行时间
「死循环」
public static void main(String[] args) throws IOException InterruptedException {
while (true) ;
}
线程一直处于运行状态,从堆栈追踪里可以看出代码一直停留在了191行,在空循环上用尽分配的执行时间