JDK 1.2 棄用 Thread.stop()、suspend()、resume(),原因:
stop():強制釋放鎖 → 數據不一致suspend()/resume():易死鎖(持鎖時掛起)interrupt() + 協作式取消標誌循環等待資源鎖。解決:全局固定獲鎖順序(如 A→B→C→D)。
線程忙於響應外部事件(如不斷重試),無法推進實質工作。類比:秘書只接電話不打字。解決:引入退避策略、優先級調度。
多線程非原子操作共享變量導致數據競爭。解決:synchronized、volatile、原子類、不可變對象。
線程數過多耗盡文件描述符、DB 連接等稀缺資源。解決:資源池化(連接池、線程池)。
public class Probe extends Thread {
public void run() {
while (true) {
Thread[] threads = new Thread[100];
int n = Thread.enumerate(threads);
for (int i = 0; i < n; i++) {
Thread t = threads[i];
System.out.printf("%s\t%d\t%b\t%b%n",
t.getName(), t.getPriority(), t.isAlive(), t.isDaemon());
}
Thread.sleep(5000);
}
}
}
定期打印所有線程名、優先級、存活狀態、守護標誌,快速定位泄漏/阻塞線程。