ホームページ  >  記事  >  Java  >  Java スレッドの優先順位

Java スレッドの優先順位

WBOY
WBOYオリジナル
2024-08-30 16:02:56372ブラウズ

「処理の最小単位」と呼ばれるスレッドは、実行する必要のあるいくつかの作業が割り当てられた軽量のサブプロセスです。スレッドは、割り当てられた同じメモリ スロットを共有し、互いに独立しているため、マルチタスクが促進されます。しかし、複数のスレッドが共有メモリ スロットで実行されている場合、リソース上で競合が必ず発生します。この競合を回避して高スループットを達成するために、スレッドの優先順位付けの概念が導入されました。複数のタスクが同じシステム上で実行されている場合、これは大きな意味を持ちます。 「スレッド スケジューラは、優先度に従って実行スレッドを割り当てる作業を行います。」

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

JVM (JAVA 仮想マシン) は、デフォルトで、またはプログラマによって明示的にスレッドの優先順位を決定します。優先度は 1 ~ 10 で、スレッドに最も高い優先度を与えたい場合は 10 が割り当てられます。コンテキストの切り替え変更は、優先順位に従ってスレッド 1 からスレッド 2 などへの移行に役立ちます。

注: 2 つ以上のスレッドに同じ優先順位が割り当てられる可能性があり、その場合、それらの実行はオペレーティング システムに依存します。たとえば、Windows はラウンドロビン アルゴリズムを使用してこのケースを処理します。

Java スレッド優先度の変数

JAVA にはマクロの形式で事前に保存されている 3 つの主要な変数があり、以下で説明します。

  • 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 です。
  • 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 の優先順位を設定しているときに、9 の代わりに 13 に優先順位が与えられたときに、このエラーが発生しました。

例外:

スレッド「メイン」java.lang.IllegalArgumentException での例外

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

test2.main (test2.java:14) で

Java スレッド優先順位の利点

マルチスレッド化と、以下にリストされているスレッドへの優先順位の割り当てには、多くの利点があります。

  • スレッドの優先順位とともに、システム内で複数の操作を同時に実行できるようになります。たとえば、ユーザーがインターネット サーフィンをしているときに、新しいソフトウェアがインストールされたため、突然システムが中断されました。この場合、インターネットサーフィンよりもシステムの再起動が優先されます。
  • プログラマがスレッド優先度を明示的に定義しない場合、JAVA スレッドは親トレッドから優先度を継承します。下流スレッドの優先順位をバイパスして対称性を維持する優先順位の保持があります。プログラマによるプログラムのデバッグが容易になります。
  • コードがシンプルになるため、保守が容易になります。
  • 優先順位を割り当てることで、コンテキスト切り替えの作業がはるかに簡単になります。

結論

これは、同じシステム内で複数のタスクを操作するために広く使用されている効率的な方法の 1 つです。スレッドはメモリを共有するので、これはメモリ効率の高い方法でもあります。システム内で複数のスレッドを実行できますが、最初にどれを選択すべきかプロセッサが混乱する可能性があります。この問題は、スレッドに優先順位を割り当てることで解決されました。スレッドは、終了するか、より高い優先度のスレッドによって中断されるまで、実行を続けます。この機能はオペレーティング システムと密接に連携します。マルチスレッドという魔法の概念が登場するまで、音楽を聴きながらインターネット サーフィンをしながら Word ドキュメントを準備することは、それほど効率的ではありませんでした。

以上がJava スレッドの優先順位の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。