成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java并發編程:什么是線程優先級?

開發 前端
Java只是為操作系統提供了一個線程優先級的參考值。線程在操作系統中的最終優先級仍然由操作系統決定。線程的執行順序最終由操作系統中的調度器決定,線程的優先級肯定是在線程被調用之前設置的。

線程優先級是操作系統在調度線程時為每個線程分配的執行順序優先級。優先級較高的線程會先于優先級較低的線程執行。

在Java中,線程的優先級可以設置為1到10之間的值,默認的線程優先級是5。

源碼:

圖片圖片

  • MIN_PRIORITY:線程的最低優先級,值為1。
  • NORM_PRIORITY:線程的默認優先級,值為5。
  • MAX_PRIORITY:線程的最高優先級,值為10。

然而,并非所有操作系統都支持10個級別的優先級(例如,有些操作系統只支持3個級別:)。

Java只是為操作系統提供了一個線程優先級的參考值。線程在操作系統中的最終優先級仍然由操作系統決定。

線程的執行順序最終由操作系統中的調度器決定,線程的優先級肯定是在線程被調用之前設置的。

一般來說,優先級較高的線程比優先級較低的線程有更高的機會被執行。我們可以使用Thread類的setPriority()方法來設置線程的優先級。

public class Demo {
    public static void main(String[] args) {
        Thread a = new Thread();
        System.out.println("默認線程優先級: " + a.getPriority());
        Thread b = new Thread();
        b.setPriority(9);
        System.out.println("設置線程優先級: " + b.getPriority());
    }
}

輸出:

默認線程優先級: 5
設置線程優先級: 9

為什么不推薦使用線程優先級?

既然有1到10的級別來設置線程的優先級,你可能會問:我可以在業務代碼中使用這個方法來指定某些線程的執行順序嗎?

我的回答是:不行!

Java中的優先級并不可靠,在Java程序中設置的線程優先級只是對操作系統的一個建議,操作系統不一定會采納。實際的執行順序由操作系統的線程調度算法決定

讓我們用代碼來驗證一下:

public class TestExecuteOrder {
    staticclass MyRunnable implements Runnable {
        @Override
        public void run() {
            System.out.printf("當前執行的線程是: %s, 優先級: %d%n",
                    Thread.currentThread().getName(),
                    Thread.currentThread().getPriority());
        }
    }

    public static void main(String[] args) {
        Thread t1 = new Thread(new MyRunnable());
        t1.setPriority(1);
        Thread t2 = new Thread(new MyRunnable());
        t2.setPriority(5);
        Thread t3 = new Thread(new MyRunnable());
        t3.setPriority(10);
        t3.start();
        t2.start();
        t1.start();
    }
}

如果按順序執行,這個程序應該按照10、5、1的順序輸出。

但看看某個特定的輸出:

當前執行的線程是: Thread-1, 優先級: 5
當前執行的線程是: Thread-2, 優先級: 10
當前執行的線程是: Thread-0, 優先級: 1

優先級為5的線程實際上在優先級為10的線程之前輸出了結果,所以看起來這個優先級設置確實不可靠 。

線程優先級與線程組優先級的關系

在前一篇文章中,我們討論過線程必須存在于一個線程組中。那么,當線程的優先級與線程組的優先級不同時會發生什么呢?讓我們用以下代碼來驗證:

public class ThreadGroupOrder {
    public static void main(String[] args) {
        ThreadGroup myThreadGroup = new ThreadGroup("myThreadGroup");
        myThreadGroup.setMaxPriority(6);
        Thread myThread = new Thread(myThreadGroup, "myThread");
        myThread.setPriority(8);
        System.out.println("線程組優先級: " + myThreadGroup.getMaxPriority());
        System.out.println("線程優先級: " + myThread.getPriority());
    }
}

輸出:

線程組優先級: 6
線程優先級: 6

所以,如果線程的優先級高于它所在的線程組的優先級,那么該線程的優先級將失效,并被替換為線程組的最大優先級。

責任編輯:武曉燕 來源: 程序猿技術充電站
相關推薦

2010-03-18 14:09:20

Java線程同步

2009-08-28 17:10:59

C#線程優先級

2024-04-30 11:00:10

數據中心

2025-02-03 00:40:00

線程組Java并發編程

2012-08-14 09:38:29

WAN優化

2020-06-04 08:36:55

Linux內核線程

2022-12-23 09:41:14

優先級反轉

2023-06-30 19:44:56

CPU調頻線程

2024-05-20 10:03:15

線程池優先級隊列排序方法

2010-08-31 11:04:48

CSS優先級

2010-09-01 14:10:36

CSS優先級

2010-09-13 17:30:07

CSS優先級

2022-06-02 09:29:55

線程組線程樹狀結構

2011-12-29 13:31:15

Java

2025-02-17 00:00:25

Java并發編程

2025-02-19 00:05:18

Java并發編程

2024-12-03 00:44:50

2021-04-06 10:45:18

React前端優先級

2020-09-30 09:07:37

DevOps

2025-05-26 09:40:02

!importantCSS 優先級開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av国产精品 | 国产一级成人 | 成人精品一区二区三区中文字幕 | 国产精品一区二区电影 | 91在线看片 | 亚洲一区不卡在线 | 一区二区免费看 | 超碰av免费 | 天堂av免费观看 | 一级特黄在线 | 成人激情视频在线播放 | 亚洲视频在线观看免费 | 在线看av网址 | 国产精品久久久久久久久久久久久 | 欧美精品一区二区三区在线播放 | 天天影视亚洲综合网 | 91av在线视频观看 | 精品91久久| 亚洲不卡视频 | 日本a∨精品中文字幕在线 亚洲91视频 | 黄色国产 | 国产一二三区精品视频 | 在线观看国产视频 | 欧美精品第一页 | 欧美激情视频一区二区三区免费 | 国产精品久久久久aaaa九色 | 日韩精品一区在线 | 午夜影院在线观看免费 | 国产人久久人人人人爽 | 台湾佬久久 | 欧美日韩在线免费观看 | 国产精品久久午夜夜伦鲁鲁 | 色www精品视频在线观看 | 成人免费在线观看视频 | 免费v片在线观看 | 黄色大片在线免费观看 | 精品久久99| 精品国产第一区二区三区 | 91视频中文| 一级片免费视频 | 国产一区亚洲二区三区 |