教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

Java線(xiàn)程優(yōu)先級(jí):Thread類(lèi)的優(yōu)先級(jí)常量

更新時(shí)間:2021年11月10日13時(shí)52分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

在應(yīng)用程序中,如果要對(duì)線(xiàn)程進(jìn)行調(diào)度,最直接的方式就是設(shè)置線(xiàn)程的優(yōu)先級(jí)。優(yōu)先級(jí)越高的線(xiàn)程獲得CPU執(zhí)行的機(jī)會(huì)越大,而優(yōu)先級(jí)越低的線(xiàn)程獲得CPU執(zhí)行的機(jī)會(huì)越小。線(xiàn)程的優(yōu)先級(jí)用1~10的整數(shù)來(lái)表示,數(shù)字越大優(yōu)先級(jí)越高。除了可以直接使用數(shù)字表示線(xiàn)程的優(yōu)先級(jí)外,還可以使用Thread類(lèi)中提供的3個(gè)靜態(tài)常量表示線(xiàn)程的優(yōu)先級(jí),如下所示。

Thread類(lèi)的優(yōu)先級(jí)常量
Thread類(lèi)的靜態(tài)常量 功能描述
static int MAX_PRIORITY 表示線(xiàn)程的最高優(yōu)先級(jí),值為10
static int MIN_PRIORITY 表示線(xiàn)程的最低優(yōu)先級(jí),值為1
static int NORM_PRIORITY 表示線(xiàn)程的普通優(yōu)先級(jí),值為5

程序在運(yùn)行期間,處于就緒狀態(tài)的每個(gè)線(xiàn)程都有自己的優(yōu)先級(jí),例如,main線(xiàn)程具有普通優(yōu)先級(jí)。然而線(xiàn)程優(yōu)先級(jí)不是固定不變的,可以通過(guò)Thread類(lèi)的setPriority(int newPriority)方法進(jìn)行設(shè)置,setPriority()方法中的參數(shù)newPriority接收的是1~10的整數(shù)或者Thread類(lèi)的3個(gè)靜態(tài)常量。下面通過(guò)一個(gè)案例演示不同優(yōu)先級(jí)的兩個(gè)線(xiàn)程在程序中的運(yùn)行情況,如下所示。

// 定義類(lèi)MaxPriority實(shí)現(xiàn)Runnable接口
class MaxPriority implements Runnable{
    public void run(){
        for (int i=0;i<10;i++){
            System.out.println(Thread.currentThread().getName() +"正在輸出:"+i);
        }
    }
}
// 定義類(lèi)MinPriority實(shí)現(xiàn)Runnable接口
class MinPriority implements Runnable {
    public void run(){
        for(int i =0; i<10; i++){
            System.out.println(Thread.currentThread().getName() +"正在輸出:"+i);
        }
    }
}
public class Example01{
    public static void main (String[] args){
        // 創(chuàng)建兩個(gè)線(xiàn)程
        Thread minPriority = new Thread (new MinPriority(), "優(yōu)先級(jí)較低的線(xiàn)程");
        Thread maxPriority = new Thread(new MaxPriority(),"優(yōu)先級(jí)較高的線(xiàn)程");
        minPriority.setPriority (Thread.MIN_PRIORITY);      //設(shè)置線(xiàn)程的優(yōu)先級(jí)為1
        maxPriority.setPriority (Thread.MAX_PRIORITY);      //設(shè)置線(xiàn)程的優(yōu)先級(jí)為10

        //開(kāi)啟兩個(gè)線(xiàn)程
        maxPriority.start();
        minPriority.start();
    }
}

下面代碼的運(yùn)行結(jié)果如下圖所示。

線(xiàn)程的優(yōu)先級(jí)運(yùn)行代碼

第2~8行代碼定義了MaxPriority類(lèi)并實(shí)現(xiàn)了Runnable接口,第10~16行代碼定義實(shí)現(xiàn)了Runnable接口的MinPriority類(lèi),并在MaxPriority類(lèi)與MinPriority類(lèi)中使用for循環(huán)打印正在發(fā)售的票數(shù),在第22行代碼中使用MIN_PRIORITY方法設(shè)置minPriority線(xiàn)程的優(yōu)先級(jí)為1,在第23行代碼中使用MAX_PRIORITY方法設(shè)置manPriority線(xiàn)程優(yōu)先級(jí)為10。

從運(yùn)行結(jié)果可以看出,優(yōu)先級(jí)較高的maxPriority線(xiàn)程先運(yùn)行,運(yùn)行完畢后優(yōu)先級(jí)較低的minPriority線(xiàn)程才開(kāi)始運(yùn)行。所以?xún)?yōu)先級(jí)越高的線(xiàn)程獲取CPU切換時(shí)間片的概率就越大。



猜你喜歡

進(jìn)程和線(xiàn)程的區(qū)別和聯(lián)系是什么?

Java中的線(xiàn)程池有哪些?

java線(xiàn)程休眠的sleep方法詳細(xì)介紹

傳智教育Java培訓(xùn)高手班課程

0 分享到:

Java高級(jí)軟件工程師課程javaee

Python大數(shù)據(jù)課程python

web前端課程全薪升級(jí)V8.5web

AI+設(shè)計(jì)課程design

大數(shù)據(jù)培訓(xùn)班cloud

軟件測(cè)試培訓(xùn)課程test

c

新媒體運(yùn)營(yíng)培訓(xùn)課程netmarket

產(chǎn)品經(jīng)理培訓(xùn)課程pm

linux培訓(xùn)班Linux

影視制作培訓(xùn)movies

智能機(jī)器人開(kāi)發(fā)robot

電商視覺(jué)設(shè)計(jì)uids

人工智能培訓(xùn)課程Python

集成電路應(yīng)用開(kāi)發(fā)(嵌入式)培訓(xùn)課程jdbc

和我們?cè)诰€(xiàn)交談!