這篇文章主要介紹java中需要進行線程中斷的場景有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
專注于為中小企業(yè)提供網(wǎng)站建設、網(wǎng)站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)新邵免費做網(wǎng)站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉變。
很多線程的運行模式是死循環(huán),比如在生產者/消費者模式中,消費者主體就是一個死循環(huán),它不停的從隊列中接受任務,執(zhí)行任務,在停止程序時,我們需要一種"優(yōu)雅"的方法以關閉該線程。
在一些用戶啟動的任務中,線程是用戶啟動的,比如手動啟動批次任務,在任務執(zhí)行過程中,用戶可能會希望取消該任務。
在一些場景中,比如從第三方服務器查詢一個結果,我們希望在限定的時間內得到結果,如果得不到,我們會希望取消該任務。
有時,我們會啟動多個線程做同一件事,比如類似搶火車票,我們可能會讓多個好友幫忙從多個渠道買火車票,只要有一個渠道買到了,我們會通知取消其他渠道。
public boolean isInterrupted()
判斷線程中斷標志位是否為true
public void interrupt()
設置線程中斷標志位為true,但對于線程不同的狀態(tài),不一定能設置成功。
public static boolean interrupted()
返回線程中斷標志位,并清空。
分幾種情況:
這種情況下只設置中斷標志位。
當調用如下方法時進入等待狀態(tài),包括的方法有:
WATING:調用了鎖資源的wait方法,或調用了join方法。
TIMED_WAITING:wait(long timeout),sleep(long millis),join(long millis)。(wait與sleep的區(qū)別:是否釋放鎖)。
拋出InterruptedException異常并且線程中斷標志位被清空,針對此一般一般是交由上級處理,若希望線程中斷,在catch里面執(zhí)行清理工作或重設線程標志位。
只設置標志位。
不會有任何效果。
不是說調用了interrupt()方法,線程就終止了,需要線程實現(xiàn)者通過代碼實現(xiàn),如下:
while (!Thread.currentThread().isInterrupted()) { //清理邏輯 }
以上是“java中需要進行線程中斷的場景有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!