Java執行緒stop和suspend的廢棄

2021-07-10 09:19:48 字數 763 閱讀 5007

jdk1.0定義了stop和suspend方法,stop用來直接終止執行緒,suspend會阻塞執行緒直到另乙個執行緒呼叫resume.

stop和suspend都有一些共同的點:都試圖專橫的控制乙個給定了的執行緒的行為.

從jdk1.2開始,這兩個方法都被棄用了.stop天生就不安全,而經驗告訴我們呢suspend方法會經常導致死鎖。

反對使用stop(),是因為它不安全。它會解除由執行緒獲取的所有鎖定,當在乙個執行緒物件上呼叫stop()方法時,這個執行緒物件所執行的執行緒就會立即停止,假如乙個執行緒正在執行:synchronized void  由於方法是同步的,多個執行緒訪問時總能保證x,y被同時賦值,而如果乙個執行緒正在執行到x = 3;時,被呼叫了 stop()方法,即使在同步塊中,它也乾脆地stop了,這樣就產生了不完整的殘廢資料。而多執行緒程式設計中最最基礎的條件要保證資料的完整性,所以請忘記執行緒的stop方法,以後我們再也不要說「停止執行緒」了。而且如果物件處於一種不連貫狀態,那麼其他執行緒能在那種狀態下檢查和修改它們。結果 很難檢查出真正的問題所在。

suspend()方法容易發生死鎖。呼叫suspend()的時候,目標執行緒會停下來,但卻仍然持有在這之前獲得的鎖定。此 時,其他任何執行緒都不能訪問鎖定的資源,除非被"掛起"的執行緒恢復執行。對任何執行緒來說,如果它們想恢復目標執行緒,同時又試圖使用任何乙個鎖定的資源,就 會造成死鎖。所以不應該使用suspend(),而應在自己的thread類中置入乙個標誌,指出執行緒應該活動還是掛起。若標誌指出執行緒應該掛起,便用 wait()命其進入等待狀態。若標誌指出執行緒應當恢復,則用乙個notify()重新啟動執行緒。

Java執行緒stop和suspend的廢棄

jdk1.0定義了stop和suspend方法,stop用來直接終止執行緒,suspend會阻塞執行緒直到另乙個執行緒呼叫resume.stop和suspend都有一些共同的點 都試圖專橫的控制乙個給定了的執行緒的行為.從jdk1.2開始,這兩個方法都被棄用了.stop天生就不安全,而經驗告訴我們呢...

執行緒的stop方法和interrupt方法

建立測試需要的類 public class mythread extends thread catch interruptedexception e y 列印x和y的值 public void printxandy 用stop方法來中止執行緒 測試用main方法如下 public class tes...

java 程序和執行緒

1,程序 當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。執行緒 執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式。多執行緒 多執行緒是指...