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