如何"優雅"地終止一個執行緒?
轉載自 如何"優雅"地終止一個執行緒?
我們的系統肯定有些執行緒為了保證業務需要是要常駐後臺的,一般它們不會自己終止,需要我們通過手動來終止它們。我們知道啟動一個執行緒是start方法,自然有一個對應的終止執行緒的stop方法,通過stop方法可以很快速、方便地終止一個執行緒,我們來看看stop的原始碼。
通過註解@Deprecated看出stop方法被標為廢棄的方法,jdk在以後的版本中可能被移除,不建議大家使用這種API。
那為什麼這麼好的一個方法怎麼不推薦使用,還要標註為廢棄呢?
假設有這樣的一個業務場景,一個執行緒正在處理一個複雜的業務流程,突然間執行緒被呼叫stop而意外終止,這個業務資料還有可能是一致的嗎?這樣是肯定會出問題的,stop會釋放鎖並強制終止執行緒,造成執行一半的執行緒終止,帶來的後果也是可想而知的,這就是為什麼jdk不推薦使用stop終止執行緒的方法的原因,因為它很暴力會帶來資料不一致性的問題。
正因為stop方法太過暴力,所以一般不推薦使用,除非你非常清楚你自己的業務場景,用stop終止不會給你的業務帶來影響。
說了這麼多,那如何優雅地終止一個執行緒呢?看看下面的程式。
其實也不難,只需要新增一個變數,判斷這個變數在某個值的時候就退出迴圈,這時候每個迴圈為一個整合不被強行終止就不會影響單個業務的執行結果。
相關文章
- 如何優雅的停止一個執行緒?執行緒
- 安全優雅地停止執行緒執行緒
- Thread執行緒終止interruptthread執行緒
- 併發程式設計——如何終止執行緒程式設計執行緒
- 執行緒的基本操作:新建和終止執行緒執行緒
- 如何優雅的使用執行緒池執行緒
- Docker 容器優雅終止方案Docker
- Java之 join 等待執行緒終止Java執行緒
- Thinking in Java---如何正確的終止子執行緒ThinkingJava執行緒
- 終止java執行緒的2種方法Java執行緒
- Go的優雅終止姿勢Go
- 如何優雅的使用和理解執行緒池執行緒
- 如何優雅的關閉Java執行緒池Java執行緒
- 如何優雅地列印一個Java物件?Java物件
- 還不知道如何在java中終止一個執行緒?快來,一文給你揭秘Java執行緒
- Java優雅關閉執行緒池Java執行緒
- 如何優雅地恢復執行中的容器應用
- subprocess.Popen 如何提前終止程式執行
- 在Java中如何優雅的停止一個執行緒?可別再用Thread.stop()了!Java執行緒thread
- 優雅關閉執行緒池的方案執行緒
- Java實現終止執行緒池中正在執行的定時任務Java執行緒
- 如何優雅地求和?
- 優雅地等待子協程執行完畢
- 單例模式(上)—如何優雅地保證執行緒安全問題單例模式執行緒
- 單例模式(上)---如何優雅地保證執行緒安全問題單例模式執行緒
- drools執行完某個規則後終止別的規則執行
- 如何優雅地使用 macOSMac
- C#多執行緒學習(二) 如何操縱一個執行緒C#執行緒
- 如何優雅地鏈式取值
- Git | 如何優♂雅地管理版本Git
- 如何在Flutter上優雅地序列化一個物件(實用)Flutter物件
- 加入一個執行緒執行緒
- 如何實現線上優雅停機和調整執行緒池引數?執行緒
- 【Java面試】如何中斷一個正在執行的執行緒?Java面試執行緒
- 如何優雅地升級一個Creator 2.x 專案到 3.6.2 ?
- 如何優雅地取消Retrofit請求?
- 如何優雅地向公司提加薪
- Kotlin如何優雅地使用Scope FunctionsKotlinFunction