建立測試需要的類
public
class
mythread
extends
thread
catch
(interruptedexception e)
y++;}
}/**
* 列印x和y的值
*/public
void
printxandy()
}
用stop方法來中止執行緒測試用main方法如下:
結果如下:public
class
testmain
//列印x和y的值
mythread.
printxandy();}}
可以發現x的值是1,而y的值卻是0。所以從這裡可以了解到stop方法的暴力之處了,stop方法會直接把執行中的執行緒強行中止掉,造成資料不一致的問題,導致了執行緒安全的問題,所以jdk其實不建議使用。
使用interrupt方法中止執行緒
執行結果如下:public
class
testmain
//列印x和y的值
mythread.
printxandy();}}
可以發現在sleep方法丟擲了乙個異常後,x和y的值都是1,執行緒是安全的。
總結:
Java執行緒stop和suspend的廢棄
jdk1.0定義了stop和suspend方法,stop用來直接終止執行緒,suspend會阻塞執行緒直到另乙個執行緒呼叫resume.stop和suspend都有一些共同的點 都試圖專橫的控制乙個給定了的執行緒的行為.從jdk1.2開始,這兩個方法都被棄用了.stop天生就不安全,而經驗告訴我們呢...
Java執行緒stop和suspend的廢棄
jdk1.0定義了stop和suspend方法,stop用來直接終止執行緒,suspend會阻塞執行緒直到另乙個執行緒呼叫resume.stop和suspend都有一些共同的點 都試圖專橫的控制乙個給定了的執行緒的行為.從jdk1.2開始,這兩個方法都被棄用了.stop天生就不安全,而經驗告訴我們呢...
stop 和suspend 方法為何不推薦使用
用 synchronized 關鍵字修飾同步方法。反對使用stop 是因為它不安全 它會解除由執行緒獲取的所有鎖定 而且如果物件處於一種不連貫狀態,那麼其他執行緒能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend 方法容易發生死鎖 呼叫suspend 的時候,目標執行緒會停下...