1. 序章

このチュートリアルでは、スレッドスケジューラが優先度ベースでスレッドを実行する方法について説明します。 さらに、Javaでスレッドの優先順位のタイプについて説明します。

2. 優先順位の種類

Javaでは、スレッドの優先順位は1から10の範囲の整数です。 整数が大きいほど、優先度が高くなります。 スレッドスケジューラは、各スレッドからのこの整数を使用して、実行を許可するスレッドを決定します。 Threadクラスは、3つのタイプの優先順位を定義します

  • 最小優先度
  • 通常の優先度
  • 最大優先度

Thread クラスは、これらの優先度タイプを定数 MIN_PRIORITY NORM_PRIORITY 、および MAX_PRIORITY として定義し、値はそれぞれ1、5、および10です。 。 NORM_PRIORITYは、新しいスレッドのデフォルトの優先度です。

3. スレッド実行の概要

JVMは、固定優先度プリエンプティブスケジューリングと呼ばれるスケジューリングアルゴリズムをサポートしています。 すべてのJavaスレッドに優先順位があり、JVMは優先順位が最も高いスレッドを最初に提供します。

スレッドを作成すると、デフォルトの優先度が継承されます。 複数のスレッドを実行する準備ができると、JVMは最も優先度の高い実行可能スレッドを選択して実行します。 このスレッドが停止するか実行できなくなると、優先度の低いスレッドが実行されます。 2つのスレッドの優先度が同じ場合、JVMはそれらをFIFO順に実行します

別のスレッドを実行させる可能性のある2つのシナリオがあります。

  • 現在のスレッドよりも優先度の高いスレッドが実行可能になります
  • 現在のスレッドは実行可能状態またはyieldsを終了します(一時的に一時停止して他のスレッドを許可します)

一般に、いつでも、最も優先度の高いスレッドが実行されています。 ただし、場合によっては、スレッドスケジューラが、飢餓を回避するために実行に優先度の低いスレッドを選択することがあります

4. スレッドの優先順位を知り、変更する

JavaのThreadクラスは、スレッドの優先度をチェックして変更するためのメソッドを提供します。 getPriority() instanceメソッドは、その優先度を表す整数を返します。 setPriority()インスタンスメソッドは、スレッドの優先度を変更するために1〜10の整数を取ります。 1〜10の範囲外の値を渡すと、メソッドはエラーをスローします。

5. 結論

この短い記事では、プリエンプティブスケジューリングアルゴリズムを使用して、Javaで複数のスレッドが優先的に実行される方法について説明しました。 さらに、優先度の範囲とデフォルトのスレッドの優先度を調べました。 また、スレッドの優先度を確認し、必要に応じて操作するためのJavaメソッドを分析しました。