更新時間:2022-10-11 來源:黑馬程序員 瀏覽量:
在之前我們講解過,程序中的多個線程是并發(fā)執(zhí)行的,某個線程若想被執(zhí)行必須要得到CPU的使用權。Java虛擬機會按照特定的機制為程序中的每個線程分配CPU的使用權,這種機制稱為線程的調度。
在計算機中,線程調度有兩種模型,分別是分時調度模型和搶占式調度模型。分時調度模型,是指讓所有的線程輪流獲得CPU的使用權,并且平均分配每個線程占用CPU的時間片。搶占式調度模型,是指讓可運行池中優(yōu)先級高的線程優(yōu)先占用CPU,而對于優(yōu)先級相同的線程,隨機選擇一個線程使其占用CPU,當它失去了CPU的使用權后,再隨機選擇其他線程獲取CPU使用權。Java虛擬機默認采用搶占式調度模型,通常情況下程序員不需要去關心它,但在某些特定的需求下需要改變這種模式,由程序自己來控制CPU的調度。
在應用程序中,如果要對線程進行調度,最直接的方式就是設置線程的優(yōu)先級。優(yōu)先級越高的線程獲得CPU執(zhí)行的機會越大,而優(yōu)先級越低的線程獲得CPU執(zhí)行的機會越小。線程的優(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)方法進行設置,setPriority()方法中的參數(shù)newPriority接收的是1~10的整數(shù)或者Thread類的3個靜態(tài)常量。