執行緒的stop方法和interrupt方法

2021-10-02 09:23:04 字數 985 閱讀 9543

建立測試需要的類

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 的時候,目標執行緒會停下...