更新時(shí)間:2022-10-11 來(lái)源:黑馬程序員 瀏覽量:
在之前我們講解過(guò),程序中的多個(gè)線程是并發(fā)執(zhí)行的,某個(gè)線程若想被執(zhí)行必須要得到CPU的使用權(quán)。Java虛擬機(jī)會(huì)按照特定的機(jī)制為程序中的每個(gè)線程分配CPU的使用權(quán),這種機(jī)制稱為線程的調(diào)度。
在計(jì)算機(jī)中,線程調(diào)度有兩種模型,分別是分時(shí)調(diào)度模型和搶占式調(diào)度模型。分時(shí)調(diào)度模型,是指讓所有的線程輪流獲得CPU的使用權(quán),并且平均分配每個(gè)線程占用CPU的時(shí)間片。搶占式調(diào)度模型,是指讓可運(yùn)行池中優(yōu)先級(jí)高的線程優(yōu)先占用CPU,而對(duì)于優(yōu)先級(jí)相同的線程,隨機(jī)選擇一個(gè)線程使其占用CPU,當(dāng)它失去了CPU的使用權(quán)后,再隨機(jī)選擇其他線程獲取CPU使用權(quán)。Java虛擬機(jī)默認(rèn)采用搶占式調(diào)度模型,通常情況下程序員不需要去關(guān)心它,但在某些特定的需求下需要改變這種模式,由程序自己來(lái)控制CPU的調(diào)度。
在應(yīng)用程序中,如果要對(duì)線程進(jìn)行調(diào)度,最直接的方式就是設(shè)置線程的優(yōu)先級(jí)。優(yōu)先級(jí)越高的線程獲得CPU執(zhí)行的機(jī)會(huì)越大,而優(yōu)先級(jí)越低的線程獲得CPU執(zhí)行的機(jī)會(huì)越小。線程的優(yōu)先級(jí)用1~10的整數(shù)來(lái)表示,數(shù)字越大優(yōu)先級(jí)越高。除了可以直接使用數(shù)字表示線程的優(yōu)先級(jí)外,還可以使用Thread類中提供的3個(gè)靜態(tài)常量表示線程的優(yōu)先級(jí),如下所示。
1.static int MAX_PRIORITY:表示線程的最高優(yōu)先級(jí),值為10。
2.static int MIN_PRIORITY:表示線程的最低優(yōu)先級(jí),值為1。
3.static int NORM_PRIORITY:表示線程的普通優(yōu)先級(jí),值為5。
程序在運(yùn)行期間,處于就緒狀態(tài)的每個(gè)線程都有自己的優(yōu)先級(jí),例如,main線程具有普通優(yōu)先級(jí)。然而線程優(yōu)先級(jí)不是固定不變的,可以通過(guò)Thread類的setPriority(int newPriority)方法進(jìn)行設(shè)置,setPriority()方法中的參數(shù)newPriority接收的是1~10的整數(shù)或者Thread類的3個(gè)靜態(tài)常量。