成人免费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-09-01 14:10:36

CSS優先級

2010-08-31 11:04:48

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技術棧公眾號

主站蜘蛛池模板: 日韩视频在线免费观看 | 亚洲国产免费 | 精品国产欧美一区二区 | 国产特一级黄色片 | 福利视频网 | 国产精品无码专区在线观看 | 国产精品乱码一区二区三区 | 国产精品久久久久久久久久久久 | 在线免费观看欧美 | 日本网站免费观看 | 伊人啪啪网 | 成人在线精品视频 | 日日日日日日bbbbb视频 | 男女啪啪高潮无遮挡免费动态 | 国产91丝袜在线熟 | 日韩色视频| 91久久精品一区二区二区 | 影音先锋中文字幕在线观看 | 97av视频在线 | 久草日韩 | 日韩精品视频一区二区三区 | 日本一区二区三区四区 | 黄色在线观看国产 | 欧美一区二区三区的 | 成人不卡视频 | 国产精品黄色 | 欧洲免费毛片 | 国产清纯白嫩初高生在线播放视频 | 伊人狠狠 | 成人福利网| 精品国产色 | 在线亚洲一区二区 | 国产亚洲欧美日韩精品一区二区三区 | 久久婷婷国产麻豆91 | 国产精品久久亚洲7777 | 午夜国产精品视频 | av在线免费观看不卡 | 国产一区二区视频免费在线观看 | www.玖玖玖 | 日韩在线视频观看 | 九九视频在线观看 |