計(jì)算機(jī)通常只有一個(gè) CPU,在任意時(shí)刻只能執(zhí)行一條機(jī)器指令,每個(gè)線程只有獲得CPU 的使用權(quán)才能執(zhí)行指令。所謂多線程的并發(fā)運(yùn)行,其實(shí)是指從宏觀上看,各個(gè)線程輪流獲得 CPU 的使用權(quán),分別執(zhí)行各自的任務(wù)。在運(yùn)行池中,會(huì)有多個(gè)處于就緒狀態(tài)的線程在等待 CPU,JAVA 虛擬機(jī)的一項(xiàng)任務(wù)就是負(fù)責(zé)線程的調(diào)度,線程調(diào)度是指按照特定機(jī)制為多個(gè)線程分配 CPU 的使用權(quán)。(Java是由JVM中的線程計(jì)數(shù)器來實(shí)現(xiàn)線程調(diào)度)
有兩種調(diào)度模型:分時(shí)調(diào)度模型和搶占式調(diào)度模型。
分時(shí)調(diào)度模型是指讓所有的線程輪流獲得 cpu 的使用權(quán),并且平均分配每個(gè)線程占用的 CPU 的時(shí)間片這個(gè)也比較好理解。
Java虛擬機(jī)采用搶占式調(diào)度模型,是指優(yōu)先讓可運(yùn)行池中優(yōu)先級(jí)高的線程占用CPU,如果可運(yùn)行池中的線程優(yōu)先級(jí)相同,那么就隨機(jī)選擇一個(gè)線程,使其占用CPU。處于運(yùn)行狀態(tài)的線程會(huì)一直運(yùn)行,直至它不得不放棄 CPU。