亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JAVA多線程異常處理

JAVA多線程異常處理

往前邁一步 2017-11-17 11:13:08
需求:有一個list集合,有三個檢查方法checkA(list), checkB(list), checkC(list),三個方法從不同角度去檢測list中的數據是否合法,當全部檢查都通過時,再進行后續的操作。解決方案:我現在想用ExecutorService創建三個線程分別調用三個檢查方法,提高效率。任何一個方法中發現無效數據直接拋一個異常結束該線程。問題:在主線程調用三個線程后,如何在主線程中catch住其中一個線程的異常,并將其他兩個線程立即停止?看了一下executorservice的shutdown()方法和shutdownnow(),我理解的是,這兩個方法都不能保證立即停止線程,不知道我的理解對嗎?
查看完整描述

1 回答

已采納
?
是王小二呀

TA貢獻88條經驗 獲得超19個贊

這么說吧,CPU單核心時,設計一個全局變量作為狀態值,比如期望值為0,三個線程分別遍歷檢查list,每次遍歷都去讀這個狀態值,只要三個線程有那一個在遍歷過程中出錯,即改變此狀態值,此時其他兩個線程便能監控到狀態變量的改變,此時跳出遍歷,結束線程即可。CPU多核心時,三個線程有可能分給三個核心去執行,此時涉及到競寫,可以對狀態值加鎖,也可在主線程再維護一個volatile變量,然后在主線程中為三個線程各自維護一個狀態變量,check方法遍歷時去檢測volatile變量,當主線程監測到三個線程其中一個check出錯改變自己的狀態變量值時,主線程即改變此volatile變量,這時候呢由于這個變量的特性,其他兩個線程會立即得到volatile變量值的變化,由此跳出遍歷并結束線程。

查看完整回答
1 反對 回復 2017-11-17
  • 1 回答
  • 0 關注
  • 995 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號