為向後兼容保留的 stop()、suspend()、resume() 在 JVM 中可能引入微妙錯誤,Java 1.1/1.2 重大修訂後已棄用。雖名稱誘人,請抵制誘惑,絕不使用。
synchronized 可完全避免。程序因大量線程難調試時,此類可派上用場:
public class Probe extends Thread {
public Probe() {}
public void run() {
while (true) {
Thread[] x = new Thread[100];
Thread.enumerate(x);
for (int i = 0; i < 100; i++) {
Thread t = x[i];
if (t == null) break;
else System.out.println(t.getName() + " " + t.getPriority()
+ " " + t.isAlive() + " " + t.isDaemon());
}
}
}
}
定期打印所有線程名稱、優先級、存活狀態、是否守護線程,幫助定位併發問題。
ExecutorService + 有界隊列替代手動線程管理,天然防資源耗盡ReentrantLock + Condition 替代 synchronized + wait/notify,功能更強CompletableFuture、parallelStream 簡化併發編排jstack、VisualVM 線程轉儲分析