一個去京東面試的作業了5年的粉絲來找我說:
Mic老師,你說并發編程很重要,果然我今天又掛在一道并發編程的面試題上了,
我問他問題是什么,他說:”如何中斷一個正在運行中的執行緒?“,
我說這個問題很多作業2年的人都知道~
好吧,對于這個問題,來看看普通人和高手的回答,
普通人:
嗯,,,,,,,,,,,
高手:
關于這個問題,我從幾個方面來回答,
首先,執行緒是系統級別的概念,在Java里面實作的執行緒,最終的執行和調度都是由作業系統來決定的,JVM只是對作業系統層面的執行緒做了一層包裝而已,
所以我們在Java里面通過start方法啟動一個執行緒的時候,只是告訴作業系統這個執行緒可以被執行,但是最終交給CPU來執行是作業系統的調度演算法來決定的,
因此,理論上來說,要在Java層面去中斷一個正在運行的執行緒,只能像類似于Linux里面的kill命令結束行程的方式一樣,強制終止,
所以,Java Thread里面提供了一個stop方法可以強行終止,但是這種方式是不安全的,因為有可能執行緒的任務還沒有,導致出現運行結果不正確的問題,
要想安全的中斷一個正在運行的執行緒,只能在執行緒內部埋下一個鉤子,外部程式通過這個鉤子來觸發執行緒的中斷命令,
因此,在Java Thread里面提供了一個interrupt()方法,這個方法配合isInterrupted()方法使用,就可以實作安全的中斷機制,
這種實作方法并不是強制中斷,而是告訴正在運行的執行緒,你可以停止了,不過是否要中斷,取決于正在運行的執行緒,所以它能夠保證執行緒運行結果的安全性,
以上就是我對這個問題的理解!
總結
這個問題,很多作業了5年以上的小伙伴都不一定清楚,
我想說的是,一味的專注在CRUD這種自動化的重復性作業中除了前面3年時間會有很多的成長以外,后續的時間基本上就是在做重復的勞動,
和別人拉開差距恰恰是作業之外的8個小時,
如果覺得作品不錯,記得點贊和關注,
著作權宣告:本博客所有文章除特別宣告外,均采用 CC BY-NC-SA 4.0 許可協議,轉載請注明來自
Mic帶你學架構
!
如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力,歡迎關注「跟著Mic學架構」公眾號公眾號獲取更多技術干貨!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/482131.html
標籤:Java
上一篇:看Spring原始碼不得不會的@Enable模塊驅動實作原理講解
下一篇:返回列表