スレッドの優先順位 - 1

「レッスンを続けましょう。スレッドの優先順位とは何ですか?また、それが必要な理由は何ですか?」

「実際の問題では、スレッドごとに実行される作業の重要性は大きく異なる可能性があります。スレッド優先度の概念は、このプロセスを制御するために作成されました。各スレッドには 1 から 10 までの数字で表される優先度があります。」

「10が最優先です。」

「1が最低です。」

「優先順位が指定されていない場合、スレッドには優先順位 5 (通常) が与えられます。」

スレッドの優先順位はその作業に大きな影響を与えませんが、むしろ推奨事項のようなものです。実行する必要があるスリープ状態のスレッドが複数ある場合、Java マシンは優先度の高いスレッドを最初に開始します。

「Java マシンは、適切と思われるスレッドを管理します。優先度の低いスレッドはアイドル状態のままにはなりません。他のスレッドよりも実行時間が短いだけですが、それでも実行されます。」

「ほとんどの場合、スレッドは常に同じ優先順位で実行されます。あるスレッドを他のスレッドよりも多く与えようとする試みは、多くの場合、プログラムのアーキテクチャ上の問題を示しています。」

「おっと。それに、スレッドに最高の優先順位を割り当てて、スレッドが 10 倍の処理を実行できるようにすることをすでに夢見ていました。」

「ここでの状況は最終決定に近づいていることが判明しました。優先度の高いスレッドはより多く機能する可能性があり、今後も機能しますが、そうでない可能性もあり、保証はありません。」

「スレッドの優先順位を変更するにはどうすればよいでしょうか?」

「とても簡単です。Thread クラスには 2 つのメソッドがあります。」

方法 説明
void setPriority(int newPriority)
新しい優先順位を設定します
int getPriority()
現在のスレッドの優先順位を返します

「Thread クラスには 3 つの定数もあります。」

パブリック最終静的 int MIN_PRIORITY = 1;

パブリック最終静的 int NORM_PRIORITY = 5;

パブリック最終静的 int MAX_PRIORITY = 10;

「推測させてください。MIN_PRIORITY が最小の優先度、MAX_PRIORITY が最大の優先度、NORM_PRIORITY がデフォルトの優先度ですか?」

「はい、その通りです。最高のスレッド優先度を割り当てるコードを書くことができます。」

「何かコツがあるの?こんな感じ?」

Thread thread = new MyThread();
thread.setPriority(Thread. MAX_PRIORITY)
thread.start();

「その通りです。何も難しいことはありませんね?」

「はい。スレッドの開始後に優先度を設定/変更できますか? それとも、スレッドが開始される前に値を設定する必要がある setDaemon のようなものですか?」

「スレッドの開始後に優先度を変更できます。すでに述べたように、これによって劇的な変化が生じるわけではありません。」

「そうですね、それは小さいですが興味深い話題でした。ありがとう、エリー。」