日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Java学习-075-多线程08:线程优先级 Thread.setPriority(Thread.MAX_PRIORITY)

發布時間:2024/8/5 综合教程 40 生活家
生活随笔 收集整理的這篇文章主要介紹了 Java学习-075-多线程08:线程优先级 Thread.setPriority(Thread.MAX_PRIORITY) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當程序中存在多個任務同時執行時,若多個任務的優先等級不一樣,則可通過設定任務對應的線程優先級,使得對應的任務線程具備高優先級執行。通過 Thread.setPriority(線程優先級) 可以實現。示例代碼如下所示:

package com.fanfengping.demo;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Demo12RunnablePriority implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            log.info("{} 運行中 {}", Thread.currentThread().getName(), i);
        }
    }

    public static void main(String[] args) {
        Thread threadPriorityA = new Thread(new Demo12RunnablePriority(), "線程 A");
        Thread threadPriorityB = new Thread(new Demo12RunnablePriority(), "線程 B");
        Thread threadPriorityC = new Thread(new Demo12RunnablePriority(), "線程 C");

        /**
         * 設定線程的優先級;數值越大,優先級越高,
         * 取值范圍 1 - 10,超出范圍會拋 IllegalArgumentException 異常
         * 默認優先級為 Thread.NORM_PRIORITY = 5
         * 子線程默認父線程的優先級,子線程優先級設定不可大于父線程優先級
         * 高優先級線程在執行時,相對其他線程擁有優先權,具體執行時由 CPU 調度確定執行
         */
        threadPriorityC.setPriority(Thread.MAX_PRIORITY);
        threadPriorityA.setPriority(Thread.MIN_PRIORITY);

        threadPriorityA.start();
        threadPriorityB.start();
        threadPriorityC.start();
    }
}

執行程序,輸出內容如下所示:

14:14:50.252 [線程 C] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 C 運行中 0
14:14:50.252 [線程 A] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 A 運行中 0
14:14:50.252 [線程 B] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 B 運行中 0
14:14:50.758 [線程 B] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 B 運行中 1
14:14:50.758 [線程 C] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 C 運行中 1
14:14:50.758 [線程 A] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 A 運行中 1
14:14:51.259 [線程 A] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 A 運行中 2
14:14:51.259 [線程 C] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 C 運行中 2
14:14:51.259 [線程 B] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 B 運行中 2
14:14:51.760 [線程 B] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 B 運行中 3
14:14:51.760 [線程 C] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 C 運行中 3
14:14:51.760 [線程 A] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 A 運行中 3
14:14:52.260 [線程 A] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 A 運行中 4
14:14:52.260 [線程 C] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 C 運行中 4
14:14:52.260 [線程 B] INFO com.fanfengping.demo.Demo12RunnablePriority - 線程 B 運行中 4

由程序輸出,可以看出,高優先級線程可能在實際運行中并未完全獲得高優先級的執行權,低優先級的線程也可能被優先執行。因而,線程自身的優先級高低,只是有更大的概率獲得優先執行,但并非完全的優先執行,線程運行的實際優先級(執行先后順序)與 CPU 的調度有直接關系。

關于線程優先級,有如下信息僅供參考(若有錯誤,敬請指正,非常感謝)

Thread.setPriority()用來設定線程的優先級
優先級可以用從1到10的范圍指定。10表示最高優先級(Thread.MAX_PRIORITY),1表示最低優先級(Thread.MIN_PRIORITY),5是普通優先級(Thread.NORM_PRIORITY,默認)
優先級不能超出1-10的取值范圍,否則拋出IllegalArgumentException
在線程 start 方法被調用之前,線程的優先級應該被設定
線程的優先級不能超過所屬線程組的優先級,即可以通過控制線程組的優先級,來控制線程組下線程的最大優先級
線程的優先級未設定時,默認所屬的線程組的優先級
未指定線程優先級時,所有線程都攜帶普通優先級
優先級最高的線程在執行時被給予優先,最終由 CPU 調度程序決定哪一個線程被執行
與線程池中等待運行機會的線程相比,當前正在運行的線程可能總是擁有更高的優先級
不要嘉定高優先級線程一定先于低優先級的線程運行
不要有業務邏輯依賴于線程優先級,結果會無法預期

我本渺小,但山峰,我一次次絕頂!

PS:若有錯誤,敬請告知,不勝感激!

Copyright @范豐平 版權所有,如需轉載請標明本文原始鏈接出處,嚴禁商業用途! 我的個人博客鏈接地址:http://www.cnblogs.com/fengpingfan

總結

以上是生活随笔為你收集整理的Java学习-075-多线程08:线程优先级 Thread.setPriority(Thread.MAX_PRIORITY)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。