“如果一個執行緒兩次呼叫start(),會出現什么問題?”
如果這個問題出自阿里p6崗位第一面的提問,你能回答出來嗎?
大家好,我是Mic,一個作業了14年的Java程式員,
關于這個問題,涉及到執行緒的生命周期,我把完整的回答整理到了15W字的面試檔案里面大家可以私信我領取,
下面來看看高手的回答,
高手:
在Java里面,一個執行緒只能呼叫一次start()方法,第二次呼叫會拋出IllegalThreadStateException,
一個執行緒本身是具備一個生命周期的,
在Java里面,執行緒的生命周期包括6種狀態,
- NEW,執行緒被創建還沒有呼叫start啟動
- RUNNABLE,在這個狀態下的執行緒有可能是正在運行,也可能是在就緒佇列里面等待作業系統進行調度分配CPU資源,
- BLOCKED,執行緒處于鎖等待狀態
- WAITING,表示執行緒處于條件等待狀態,當觸發條件后喚醒,比如wait/notify,
- TIMED_WAIT,和WAITING狀態相同,只是它多了一個超時條件觸發
- TERMINATED,表示執行緒執行結束
當我們第一次呼叫start()方法的時候,執行緒的狀態可能處于終止或者非NEW狀態下的其他狀態,
再呼叫一次start(),相當于讓這個正在運行的執行緒重新運行,不管從執行緒的安全性角度,還是從執行緒本身的執行邏輯,都是不合理的,
因此為了避免這個問題,在執行緒運行的時候會先判斷當前執行緒的運行狀態,
總結
這個問題非常簡單,
在面試程序中一般是作為熱身題目出現,
大家只需要回答出那個例外資訊就行了,
深度理解執行緒,對我們的日常開發作業以及問題診斷作業,都非常有幫助,
大家記得點贊收藏加關注!!!
著作權宣告:本博客所有文章除特別宣告外,均采用 CC BY-NC-SA 4.0 許可協議,轉載請注明來自
Mic帶你學架構!
如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力,歡迎關注「跟著Mic學架構」公眾號公眾號獲取更多技術干貨!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502096.html
標籤:Java
上一篇:深入理解java泛型
