2 つのスレッドa
とb
をb
開始し、別の 10 個の独自のスレッドを開始するプログラムがあるとします。a
利用可能な「注意」の半分を受け取りb
、そのスレッドは残りの半分を共有しますか、それともすべてが均等に共有しますか? 答えがデフォルトで後者である場合、どうすれば前者を達成できますか? ありがとう!
3 に答える
このトピックに関するすばらしいドキュメントがたくさんあります。その一つがこれです。
Java スレッドが作成されると、それを作成したスレッドから優先度が継承されます。setPriority()メソッドを使用して、作成後いつでもスレッドの優先度を変更することもできます。スレッドの優先度は、 MIN_PRIORITYからMAX_PRIORITYまでの範囲の整数です(Thread クラスで定義された定数)。整数が大きいほど、優先度が高くなります。複数のスレッドを実行する準備ができているときはいつでも、ランタイム システムは実行の優先度が最も高い「Runnable」スレッドを選択します。そのスレッドが何らかの理由で停止、解放、または「実行不可」になった場合にのみ、優先度の低いスレッドが実行を開始します。優先順位が同じ 2 つのスレッドが CPU を待機している場合、スケジューラはそのうちの 1 つを選択してラウンドロビン方式で実行します。選択したスレッドは、次の条件のいずれかが true になるまで実行されます。
- 優先度の高いスレッドが「実行可能」になります。
- 生成されるか、その run() メソッドが終了します。
- タイム スライスをサポートするシステムでは、割り当てられた時間の有効期限が切れています。
いつでも、最も優先順位の高いスレッドが実行されています。ただし、これは保証されません。スレッド スケジューラは、枯渇を回避するために優先順位の低いスレッドを実行することを選択する場合があります。このため、優先度は、効率化を目的としてスケジューリング ポリシーに影響を与える場合にのみ使用してください。アルゴリズムの正確さをスレッドの優先度に依存しないでください。