多執行緒面試 4

2021-09-25 20:14:58 字數 1594 閱讀 8354

執行緒的狀態

從thread的原始碼裡我們可以看到執行緒的狀態一共有如下六種:

新建(new):執行緒建立後尚未啟動的執行緒的狀態,即new了乙個執行緒物件但是還沒有呼叫start()方法時處於的狀態.

執行runnable:執行緒物件呼叫了start()方法後的執行緒所處的狀態,包含running和ready兩個子狀態,即處在此狀態的執行緒,有可能正在執行,也有可能正在等待cpu為它分配執行時間,處於running狀態的執行緒位於可執行執行緒之中,等待被執行緒排程選中,獲取cpu的使用權,處於ready狀態的執行緒,位於執行緒池中,等待被執行緒排程選中,獲取cpu的使用權,ready狀態的執行緒獲取cpu使用權之後就變成了running狀態.

無限期等待waiting:處於該狀態的執行緒不會被分配cpu執行時間,需要被其他執行緒顯式地被喚醒,以下方法會讓執行緒陷入此狀態:

沒有設定timeout引數的object.wait()方法.

沒有設定timeout引數的thread.join()方法.

locksupport.park()方法,其中locksupport是乙個工具類.

限期等待timed_waiting:處於該狀態的執行緒不會被分配cpu執行時間,但是在一定時間後會由系統自動喚醒,主要有以下方法可以使執行緒處於該狀態:

設定了timeout引數的object.wait()方法.

設定了timeout引數的thread.join()方法.

locksupport.parknanos()方法.

locksupport.parkuntil()方法.

thread.sleep()方法.

這些thread類的方法除了通過thread類直接呼叫外,也可以通過執行緒物件(new出來的或者thread.currentthread得到的)去呼叫的哈.

阻塞(blocked):等待獲取排它鎖(其他執行緒釋放了它就去獲取),在程式等待進入同步區域(例如進入synchronized修飾的方法或者**塊)的時候,除了正在執行的執行緒外,其他執行緒都會被阻塞.

結束terminated:已終止執行緒的狀態,表示執行緒已經結束執行,當執行緒的run()方法執行結束時或者主線程執行結束時就處於該狀態,此時再次呼叫start()方法會報錯.

面試 多執行緒

1.執行緒通常有五種狀態,建立,就緒,執行 阻塞和死亡狀態。2.阻塞的情況又分為三種 1 等待阻塞 執行的執行緒執行wait 方法,該執行緒會釋放占用的所有資源,jvm會把該執行緒放入 等待池 中。進入這個狀態後,是不能自動喚醒的,必須依靠其他執行緒呼叫notify 或notifyall 方法才能被...

java面試 多執行緒

面試總結 多執行緒 1 執行緒狀態 先簡單的看一下執行緒之間的狀態扭轉圖 從上面的圖中可以看出執行緒大概有就緒,執行,阻塞,死亡這幾個狀態,各個狀態之間的扭轉在圖中描寫挺清晰 2 執行緒池 面試過程中,經常會被問到執行緒池 執行緒池的一些核心引數 coresize,maxsize,overtime,...

面試 多執行緒基礎

作業系統中有若干程序併發執行,它們不斷申請 使用 釋放系統資源,雖然系統的程序協調 通訊機構會對它們進行控制,但也可能出現若干程序都相互等待對方釋放資源才能繼續執行,否則就阻塞的情況。此時,若不借助外界因素,誰也不能釋放資源,誰也不能解除阻塞狀態。根據這樣的情況,作業系統中的死鎖被定義為系統中兩個或...