首頁 >Java >java教程 >Java執行緒優先權

Java執行緒優先權

WBOY
WBOY原創
2024-08-30 16:02:56406瀏覽

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

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

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。該函數是 public 和 Final。

Java 執行緒優先權範例

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

範例#1

以下是一些範例,使用上面已定義的變數和 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 ();
}
}

輸出:

Java執行緒優先權

範例#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 ();
}
}

輸出:

Java執行緒優先權

注意: 優先權應嚴格落在 1 到 10 的範圍內。如果優先權超出此範圍,則編譯器會拋出以下錯誤。當使用 setPriority () 函數設定線程 t2 的優先權時,當 13 被賦予優先權而不是 9 時,我收到此錯誤。

例外:

線程“main”中的異常 java.lang.IllegalArgumentException

位於 java.base/java.lang.Thread.setPriority (Thread.java:1141)

在 test2.main (test2.java:14)

Java 執行緒優先權的優點

多執行緒和為執行緒分配優先權有許多優點,如下所示:

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

結論

這是在同一系統中操作多個任務的廣泛使用且有效的方法之一。由於線程共享內存,這種方式也是節省內存的。我們可以讓多個執行緒在系統中運行,但這可能會混淆處理器首先選擇哪個執行緒。透過為線程分配優先權解決了這個問題。該執行緒將繼續運行,直到完成或被更高優先權的執行緒中斷。此功能與作業系統密切配合。準備Word文檔,邊聽音樂邊上網,效率並不高,直到多線程這個神奇概念的出現。

以上是Java執行緒優先權的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn