一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java 停止線程需要注意的地方

Java 停止線程需要注意的地方

2020-09-12 06:56dylanguo1012 Java教程

這篇文章主要介紹了Java 停止線程需要注意的地方,幫助大家更好的理解和學習Java線程的相關資料,感興趣的朋友可以了解下

Java停止線程的原則是什么?

在 Java 中, 最好的停止線程的方式是使用中斷 interrupt, 但是這僅僅是會通知到被終止的線程 "你該停止運行了", 被終止的線程自身擁有決定權 (決定是否、以及何時停止), 這依賴于請求停止方和被停止方都遵守一種約定好的編碼規范.

  • 任務和線程的啟動很容易. 在大多數時候, 我們都會讓它們運行直到結束, 或者讓它們自行停止.然而, 有時候我們希望提前結束任務或線程, 或許是因為用戶取消了操作,或者服務需要被快速關閉, 或者是運行超時或出錯了.
  • 要使任務和線程能安全、快速、可靠地停止下來, 并不是一件容易的事. Java沒有提供任何機制來安全地終止線程. 但它提供了中斷 (Interruption), 這是一種協作機制,能夠使一個線程終止另一個線程的當前工作.
  • 這種協作式的方法是必要的, 我們很少希望某個任務、線程或服務立即停止,因為這種立即停止會使共享的數據結構處于不一致的狀態. 相反, 在編寫任務和服務時可以使用一種協作的方式: 當需要停止時,它們首先會清除當前正在執行的工作, 然后再結束. 這提供了更好的靈活性, 因為任務本身的代碼比發出取消請求的代碼更清楚如何執行清除工作.
  • 生命周期結束 (End-of-Lifecycle) 的問題會使任務、服務以及程序的設計和實現等過程變得復雜, 而這個在程序設計中非常重要的要素卻經常被忽略. 一個在行為良好的軟件與勉強運的軟件之間的最主要區別就是, 行為良好的軟件能很完善地處理失敗、關閉和取消等過程.

處理中斷的最好方法是什么?

優先選擇在方法上拋出異常.

用 throws InterruptedException 標記你的方法, 不采用 try 語句塊捕獲異常,以便于該異常可以傳遞到頂層, 讓run方法可以捕獲這一異常, 例如:

?
1
2
3
void subTask() throws InterruptedException
sleep(delay);
}

由于 run 方法內無法拋出 checked Exception (只能用 try catch), 頂層方法必須處理該異常, 避免了漏掉或者被吞掉的情況, 增強了代碼的健壯性.

如果不能拋出中斷, 要怎么做?

如果不想或無法傳遞 InterruptedException (例如用 run 方法的時候, 就不讓該方法 throws InterruptedException), 那么應該選擇在 catch 子句中調用 Thread.currentThread().interrupt() 來恢復設置中斷狀態, 以便于在后續的執行依然能夠檢查到剛才發生了中斷.

代碼演示詳見視頻, 在這里, 線程在sleep期間被中斷, 并且由 catch 捕獲到該中斷, 并重新設置了中斷狀態, 以便于可以在下一個循環的時候檢測到中斷狀態, 正常退出.

為什么用 volatile 停止線程不夠全面?

解答: 這種做法是錯誤的, 或者說是不夠全面的, 在某些情況下雖然可用, 但是某些情況下有嚴重問題。

這種方法在《Java并發編程實戰》中被明確指出了缺陷, 我們一起來看看缺陷在哪里:

此方法錯誤的原因在于, 如果我們遇到了線程長時間阻塞 (這是一種很常見的情況, 例如生產者消費者模式中就存在這樣的情況), 就沒辦法及時喚醒它, 或者永遠都無法喚醒該線程, 而 interrupt 設計之初就是把 wait 等長期阻塞作為一種特殊情況考慮在內了, 我們應該用 interrupt 思維來停止線程.

以上就是Java 停止線程需要注意的地方的詳細內容,更多關于Java 停止線程的資料請關注服務器之家其它相關文章!

原文鏈接:https://segmentfault.com/a/1190000024429547?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 波多野结衣在线看 | 男人在线网址 | 4虎影视国产在线观看精品 4s4s4s4s色大众影视 | 日韩免费毛片视频杨思敏 | 美女私人影院 | 牧教师在线观看 | 午夜精品网站 | 美女模特被c免费视频 | 69一级毛片 | 国产精品久久久久影院色老大 | 91精品国产91久久久久久 | 五月天精品视频播放在线观看 | 国内精品视频九九九九 | 我的妹妹最近有点怪在线观看 | 日本免费三片在线播放 | 色综合色狠狠天天综合色 | 亚洲AV无码偷拍在线观看 | japonensis日本护士18 | 色老板视频在线观看 | 肉肉小说在线阅读 | 北条麻妃黑人正在播放 | 99久久国产亚洲综合精品 | 亚洲国产日韩制服在线观看 | 女八把屁股扒开让男生添 | 亚洲首页国产精品丝袜 | 变形金刚第一部 | 婷婷久久综合九色综合九七 | 日本高清不卡一区久久精品 | zol中关村在线官网 yy6080欧美三级理论 | 无码毛片内射白浆视频 | 亚1洲二区三区四区免费 | 国产成人激情 | 美女禁区视频免费观看精选 | 福利国模私拍视频在线观看 | 精品久久成人免费第三区 | 福利片免费一区二区三区 | 日韩欧一级毛片在线播无遮挡 | 国产欧美精品一区二区三区四区 | 国产一精品一av一免费爽爽 | 草莓香蕉榴莲丝瓜秋葵绿巨人在线看 | 精品国产免费观看一区高清 |