那麼要怎麼終止乙個執行緒呢?

2021-09-10 14:28:25 字數 959 閱讀 7813

雖然thread.stop( )方法可以結束乙個執行緒,但是eclipse已經將這個方法標註成乙個「廢棄」的方法,也就是不推薦使用,原因大家都知道,就是stop( )方法直接終止執行緒並釋放掉鎖,容易造成一些對資料進行修改的執行緒出問題,例如導致多個執行緒讀到不一致的資料的情況。看看下面這個例子:

**要做的事情就是新建乙個寫執行緒和乙個讀執行緒,寫執行緒修改變數的值,讀執行緒把值顯示出來。寫執行緒在31行開始,獲得乙個隨機數v並賦值給類私有物件id和name,寫執行緒先給變數id賦值v,然後休眠100毫秒,再給變數name賦值。而讀執行緒(第52行開始)則是一直讀變數id和name,如果發現兩者的值不一致後,就輸出兩者的值。主線程(第64行開始),新建乙個讀執行緒並執行,然後while(true)死迴圈不停用寫執行緒對資料變數id和name做修改,然後用stop( )方法結束寫執行緒,看看情況會怎麼樣?

讀執行緒頻繁讀出兩個資料不同步的情況,也就是說,寫執行緒多次還沒執行完就被結束了,而且導致資料不同步的問題,我們的寫執行緒希望做的是把變數id和name都賦值相同的值,可是事實並沒有做到。

既然eclipse將stop( )方法標誌為「廢棄的」,那就是不鼓勵我們使用,如果我們要結束乙個執行緒,可以用新增標記的方式,以前寫c時常用的判斷標記來跳出迴圈- -、。

終止乙個執行緒

可以讓執行緒呼叫exitthread函式,以便強制執行緒終止執行 函式原型 void exitthread dword dwexitcode 該函式將終止執行緒的執行,並導致作業系統清除該執行緒使用的所有作業系統資源。但是,c 資源 如c 類物件 將不被撤消。由於這個原因,最好從執行緒函式返回,而不...

要怎麼樣做乙個合格點的程式猿呢?

要怎麼樣做乙個合格點的程式猿呢?把程式設計當做人生來看,磨刀不誤砍柴工。看完設計模式以後,就算以後設計不出很精巧的模式,我也會先仔細想好,仔細研究透了需求,分析透了設計,再寫 不然的話,後期的維護,以及擴充套件不知道要多難。或許以後,我對設計模式有了更多,更深,更好的認識,我會再次補充 設計模式 這...

執行緒的阻塞 通過外部干涉終止乙個執行緒

執行緒的生命週期 執行緒的阻塞 thread類中提供了join方法用來合併執行緒,原本有兩個執行緒兩條通道,使用了join方法以後就只剩一條通道,那麼此時兩個執行緒不再併發執行,而是順序執行,那麼如何確定這兩個執行緒誰先執行呢?假設,我在main方法中有執行緒t1,那麼此時就是main,和t1兩個執...