Java中多線程狀態(tài)和進(jìn)程狀態(tài)

狀態(tài)轉(zhuǎn)換圖.png

Java源碼中給出了5中狀態(tài):

  • New:新new出的一個(gè)線程對(duì)象,還沒有調(diào)用run方法;
  • Runnable: 可運(yùn)行狀態(tài),線程可能在運(yùn)行,也可能在等待CPU資源;
  • Blocked: 等待一個(gè)可重入鎖,或者等待一個(gè)鎖;
  • Waiting: wait(), join()方法調(diào)用后進(jìn)入的一個(gè)狀態(tài),需要通過notifyAll或者notify進(jìn)行一個(gè)喚醒;
  • TIMED_WAITING: sleep方法,wait(time)方法,或者join(time)方法調(diào)用后會(huì)進(jìn)入的一個(gè)狀態(tài),需要通過notifyAll或者notify進(jìn)行一個(gè)喚醒或者睡眠時(shí)間到會(huì)自動(dòng)進(jìn)入Runnable。

Blocked和waiting狀態(tài)的區(qū)別:
一個(gè)處理waiting狀態(tài)的線程被喚醒后進(jìn)入Blocked狀態(tài),競(jìng)爭(zhēng)synchronized鎖。

進(jìn)程的三種狀態(tài):
就緒態(tài):除CPU資源以外的其他資源已經(jīng)準(zhǔn)備好;
運(yùn)行態(tài):正在CPU運(yùn)行;
阻塞態(tài):等待一些其他時(shí)間的完成,比如I/O;

掛起(suspend)和阻塞的區(qū)別:

  • 掛起是主動(dòng)行為(需要調(diào)用Resume方法主動(dòng)激活),阻塞是被動(dòng)行為(等待某件事件完成自動(dòng)恢復(fù)為就緒狀態(tài));
  • 掛起不會(huì)釋放CPU資源,阻塞會(huì)釋放CPU資源;
  • 操作系統(tǒng)任務(wù)調(diào)度會(huì)忽略掛起的任務(wù)。
進(jìn)程狀態(tài)轉(zhuǎn)換.png

進(jìn)程調(diào)度算法:FIFO,時(shí)間片輪轉(zhuǎn),短作業(yè)優(yōu)先,優(yōu)先級(jí)調(diào)度,多級(jí)隊(duì)列調(diào)度算法,多級(jí)隊(duì)列反饋調(diào)度算法

虛擬內(nèi)存:
非遞歸中序遍歷
RC和RR怎么實(shí)現(xiàn)
I/O類型:
BIO
NIO
AIO

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容