「処理の最小単位」と呼ばれるスレッドは、実行する必要のあるいくつかの作業が割り当てられた軽量のサブプロセスです。スレッドは、割り当てられた同じメモリ スロットを共有し、互いに独立しているため、マルチタスクが促進されます。しかし、複数のスレッドが共有メモリ スロットで実行されている場合、リソース上で競合が必ず発生します。この競合を回避して高スループットを達成するために、スレッドの優先順位付けの概念が導入されました。複数のタスクが同じシステム上で実行されている場合、これは大きな意味を持ちます。 「スレッド スケジューラは、優先度に従って実行スレッドを割り当てる作業を行います。」
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
JVM (JAVA 仮想マシン) は、デフォルトで、またはプログラマによって明示的にスレッドの優先順位を決定します。優先度は 1 ~ 10 で、スレッドに最も高い優先度を与えたい場合は 10 が割り当てられます。コンテキストの切り替え変更は、優先順位に従ってスレッド 1 からスレッド 2 などへの移行に役立ちます。
注: 2 つ以上のスレッドに同じ優先順位が割り当てられる可能性があり、その場合、それらの実行はオペレーティング システムに依存します。たとえば、Windows はラウンドロビン アルゴリズムを使用してこのケースを処理します。JAVA にはマクロの形式で事前に保存されている 3 つの主要な変数があり、以下で説明します。
優先度の取得と設定に関連するいくつかの関数は次のとおりです:
次に、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 (); } }
出力:
以下は、ユーザー定義の優先度の定義と印刷の例です。
コード:
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 の優先順位を設定しているときに、9 の代わりに 13 に優先順位が与えられたときに、このエラーが発生しました。例外:
スレッド「メイン」java.lang.IllegalArgumentException での例外
java.base/java.lang.Thread.setPriority (Thread.java:1141)
test2.main (test2.java:14) で
マルチスレッド化と、以下にリストされているスレッドへの優先順位の割り当てには、多くの利点があります。
これは、同じシステム内で複数のタスクを操作するために広く使用されている効率的な方法の 1 つです。スレッドはメモリを共有するので、これはメモリ効率の高い方法でもあります。システム内で複数のスレッドを実行できますが、最初にどれを選択すべきかプロセッサが混乱する可能性があります。この問題は、スレッドに優先順位を割り当てることで解決されました。スレッドは、終了するか、より高い優先度のスレッドによって中断されるまで、実行を続けます。この機能はオペレーティング システムと密接に連携します。マルチスレッドという魔法の概念が登場するまで、音楽を聴きながらインターネット サーフィンをしながら Word ドキュメントを準備することは、それほど効率的ではありませんでした。
以上がJava スレッドの優先順位の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。