不提倡使用的方法是為支持向後兼容性而保留的那些方法
它們在以後的版本中可能出現
也可能不出現
Java 多線程支持在版本
和版本
中做了重大修訂
stop()
suspend() 和 resume() 函數已不提倡使用
這些函數在 JVM 中可能引入微妙的錯誤
雖然函數名可能聽起來很誘人
但請抵制誘惑不要使用它們
調試線程化的程序 在線程化的程序中
可能發生的某些常見而討厭的情況是死鎖
活鎖
內存損壞和資源耗盡
死鎖 死鎖可能是多線程程序最常見的問題
當一個線程需要一個資源而另一個線程持有該資源的鎖時
就會發生死鎖
這種情況通常很難檢測
但是
解決方案卻相當好
在所有的線程中按相同的次序獲取所有資源鎖
例如
如果有四個資源 —A
B
C 和 D — 並且一個線程可能要獲取四個資源中任何一個資源的鎖
則請確保在獲取對 B 的鎖之前首先獲取對 A 的鎖
依此類推
如果
線程
希望獲取對 B 和 C 的鎖
而
線程
獲取了 A
C 和 D 的鎖
則這一技術可能導致阻塞
但它永遠不會在這四個鎖上造成死鎖
活鎖 當一個線程忙於接受新任務以致它永遠沒有機會完成任何任務時
就會發生活鎖
這個線程最終將超出緩沖區並導致程序崩潰
試想一個秘書需要錄入一封信
但她一直在忙於接電話
所以這封信永遠不會被錄入
內存損壞 如果明智地使用 synchronized 關鍵字
則完全可以避免內存錯誤這種氣死人的問題
資源耗盡 某些系統資源是有限的
如文件描述符
多線程程序可能耗盡資源
因為每個線程都可能希望有一個這樣的資源
如果線程數相當大
或者某個資源的侯選線程數遠遠超過了可用的資源數
則最好使用 資源池
一個最好的示例是數據庫連接池
只要線程需要使用一個數據庫連接
它就從池中取出一個
使用以後再將它返回池中
資源池也稱為 資源庫
調試大量的線程 有時一個程序因為有大量的線程在運行而極難調試
在這種情況下
下面的這個類可能會派上用場
public class Probe extends Thread {
public Probe() {}
public void run() {
while(true) {
Thread[] x = new Thread[
];
Thread
enumerate(x);
for(int i=
; i<
; i++) {
Thread t = x[i];
if(t == null)
break;
else
System
out
println(t
getName() +
\t
+ t
getPriority()
+
\t
+ t
isAlive() +
\t
+ t
isDaemon());
}
}
}
}
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27350.html