スレッドには MIN_PRIORITY(1) から MAX_PRIORITY(10) までの範囲の優先度があることを知っています。ただし、実行するスレッドが 10 個を超える場合、それらに優先度を割り当てるにはどうすればよいですか? 優先度は 10 を超えることはできますか?
3 に答える
ただし、実行するスレッドが 10 個を超える場合、それらの [それぞれ] に [異なる] 優先度を割り当てるにはどうすればよいでしょうか?
できません。
しかし、それは問題ではありません。いずれにせよ、スレッドの優先度は大まかな優先度しか与えない可能性があります。確かに、javadoc は、スレッドの優先度がスレッドのスケジューリングにどのように影響するか (または影響するかどうか) について、強力な保証を提供していません。
最新の JVM でのスレッド スケジューリングとスレッド優先度の実際の実装は、オペレーティング システムのスレッド スケジューラによって行われます。JavaThread
の優先順位は、オペレーティング システムに対する "ヒント" にすぎません。
要するに、正しい動作のためにスレッドの優先度に依存する Java アプリケーションは信頼性が低く、最初に開発/デバッグしたプラットフォームとは異なるプラットフォームで実行すると、動作が異なる/正しくない可能性が高いということです。正しい動作のために優先順位に頼るべきではありません。提供されている同期プリミティブを使用して、必要な順序で処理が行われるようにします。
スレッドの優先順位の正確な動作が必要な場合は、「リアルタイム オペレーティング システム」上で実行される「リアルタイム Java」JVM を使用する必要があります。
javadoc には、次のように記載されていますsetPriority(int)
スロー:
IllegalArgumentException - 優先度が MIN_PRIORITY から MAX_PRIORITY の範囲にない場合。
実装によっては、適切な値を指定する必要があります。では、より細かい優先度設定を行うことはできませんThread
。
いいえ、最大優先度が 10 で最小優先度が 1 であるため、10 を超える優先度を割り当てることはできません。その優先順位に従って作業します。