首頁 > 軟體

Java執行緒優先順序變數及功能

2022-06-09 18:01:42

前言:

執行緒被稱為“最小的處理單元”,是一個輕量級的子程序,分配了一些需要執行的工作。執行緒共用分配給它們的相同記憶體插槽,並且彼此獨立,因此促進了多工處理。但是,當多個執行緒在共用記憶體插槽上執行時,必然會發生資源競爭。為了避免這種競爭,從而實現高吞吐量,引入了執行緒優先順序的概念。當多個任務在同一個系統上執行時,它具有重要意義。“執行緒排程器根據優先順序分配執行執行緒”。

JVM(JAVA虛擬機器器)預設或由程式設計師明確地決定執行緒的優先順序。優先順序在1到10之間,當我們想給執行緒最高優先順序時,就分配10。上下文切換有助於根據優先順序順序從執行緒1過渡到執行緒2等等。

注意:可能有兩個或更多執行緒被分配了相同的優先順序,那麼它們的執行取決於作業系統。例如,Windows使用迴圈演演算法來處理這種情況。

Java執行緒優先順序的變數

JAVA中以宏的形式預先儲存了三個主要變數,如下所述-

  • Public Static int MIN_PRIORITY:這是一個靜態變數,帶有“Public”型別的存取修飾符。此變數的值為1。這是為了分配一個優先順序最低的執行緒。
  • Public Static int NORM_PRIORITY:這是一個靜態變數,帶有“Public”型別的存取修飾符。該變數的值為5。這是為了分配一個具有正常優先順序的執行緒。當開發人員未明確分配優先順序時,它是預設優先順序。
  • Public Static int MAX_PRIORITY:這是一個靜態變數,帶有“Public”型別的存取修飾符。該變數的值為10。這是為了分配一個具有最高優先順序的執行緒。

與獲取和設定優先順序相關的一些功能包括:

  • Public Final int getPriority():此函數用於獲取請求的任何執行緒的優先順序。此函數返回一個整數,因為其返回型別為“int”。整數的範圍可以在1到10之間。該功能是公開的和最終的。
  • Public Final void setPriority(int newPriority):此函數用於設定請求的任何執行緒的優先順序。該函數將整數作為引數,函數定義中的引數原型中也提到了這一點。引數整數的範圍可以在1到10之間。該功能是公開的和最終的。

Java執行緒優先順序範例

以下是java執行緒優先順序的範例:

下面是一些範例,使用上面已經定義的變數和JAVA中可用的現成函數來演示執行緒優先順序的概念。

程式碼:

public class test extends Thread{
public void run (){
System.out.println ( "The name of thread running curremtly is :"+Thread.currentThread ().getName ());
System.out.println ( "The priority od thread running currently is:"+Thread.currentThread ().getPriority ());
}
public static void main (String args[]){
test t1=new test ();
test t2=new test ();
test t3=new test ();
t1.setPriority (Thread.MIN_PRIORITY);
t2.setPriority (Thread.MAX_PRIORITY);
t3.setPriority (Thread.NORM_PRIORITY);
t1.start ();
t2.start ();
t3.start ();
}
}

輸出:

範例2:

下面是一個使用者定義的優先順序定義和列印範例。

程式碼:

public class test2 extends Thread
{
public void run ()
{
System.out.println ( " The control is under run function now...");
}
public static void main (String args[])
{
// Here we are creating threads using the constructors.
test2 t1=new test2 ();
test2 t2=new test2 ();
// setpriority () function is used below along with the parameter to set the prioirity.
t1.setPriority (2);
t2.setPriority (9);
// Here we are coding on how to display output strings.
System.out.println ( " The priority assigned to thread t1 is: " + t1.getPriority ());
System.out.println ( "The priority assigned to thread t2 is: " + t2.getPriority ());
// the run () function is defined above will be called via start () function and print the strinf which is there in it.
t1.start ();
}
}

輸出:

注意:優先順序應嚴格在1到10之間。如果優先順序超出此範圍,編譯器將丟擲以下錯誤。當使用setPriority()函數設定執行緒t2的優先順序時,13被賦予了一個優先順序,而不是9。

異常情況:

Exception in thread 「main」 java.lang.IllegalArgumentException
at java.base/java.lang.Thread.setPriority (Thread.java:1141)
at test2.main (test2.java:14)

Java執行緒優先順序的優勢

多執行緒和將優先順序分配給以下執行緒有很多好處:

  • 它允許在系統中同時執行多個操作,以及執行緒的優先順序。例如,使用者正在網上衝浪,但在安裝新軟體時突然中斷了系統。在這種情況下,優先考慮重新啟動系統,而不是上網。
  • 如果程式設計師沒有明確定義執行緒優先順序,JAVA執行緒將從父執行緒繼承其優先順序。存在繞過下游執行緒中的優先順序並保持對稱性的優先順序保留。這使得程式設計師很容易偵錯程式。
  • 它使程式碼更簡單,因此易於維護。
  • 通過分配優先順序,它使上下文切換的工作變得更加容易。

結論

這是在同一個系統中操作多個任務的廣泛使用且高效的方法之一。由於執行緒共用記憶體,因此這種記憶體有效的方式也是如此。我們可以在系統中執行多個執行緒,但這可能會混淆處理器,首先選擇哪個執行緒。通過為執行緒分配優先順序,這個問題得以解決。執行緒繼續執行,直到它完成或被優先順序更高的執行緒中斷。此功能與作業系統密切配合。

到此這篇關於Java執行緒優先順序變數及功能的文章就介紹到這了,更多相關Java執行緒優先順序內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com