スレッドが作成されて開始された場合、それが開始されるとすぐに実行状態に入ることも、常に実行状態にもなりません。ライフサイクル中に、「新しい」、「実行可能」、「ランニング」、「ブロックされた」、「死んだ」という5つの州を通過する必要があります。スレッドが作成された後、CPUを占有して独立して実行することは不可能です。複数のスレッドを切り替える必要があるため、ほとんどの場合、実行とブロックの間に切り替えられます。
1。スレッドの状態
次のように、スレッドの存在にはいくつかの異なる状態があります。
1。新しいステータス
新しい状態は、スレッドが作成されたが実行を開始していない状態です。この状態により、スレッドのstart()メソッドを呼び出すことにより、スレッドを実行できます。
2。実行可能なステータス
実行可能な状態は、準備ランニング状態またはキューと呼ぶことができます。この状態は、スレッドのstart()メソッドを呼び出すことにより、スレッドを実行できるようにします。
スレッドスケジューラは、実行するスレッドとスレッドの実行期間を決定します。
3。ランニングステータス
スレッドが実行されている場合、それは実行状態にあります。
4。デッドステータス
スレッドが死んだ状態に入ると、実行できなくなります。
5。実行不可能なステータス
Java仮想マシンJVMは、スレッドの優先順位とスケジューリングの原則に従ってスレッドを実行します。
2。スレッドスケジューラ
JVMでは、スレッドスケジューラの実装は通常、次の2つの戦略に基づいています。
先制スケジューリング戦略タイムシェアリングスケジューリング戦略またはラウンドロビンスケジューリング戦略
スレッドスケジューラの実装はプラットフォームに依存しないため、スレッドのスケジューリングは予測不可能です。
3。スレッドの優先度
JVMは、新しく作成された各スレッドに優先度を割り当てます。
レベル0:これは最低の優先度です
レベル5:これは通常の優先事項です
レベル10:これが最優先事項です
これらの値を保存するために、スレッドクラスには3つの対応する変数があります。
スレッドは、最初に親スレッドの優先度を継承します。各スレッドのデフォルトの優先度はレベル5(通常の優先度)であり、メインスレッドのデフォルトの優先度はレベル5です。
スレッドの優先度は、SetPriority(int Priority)メソッドを介して設定できます。
パブリックファイナルボイドsetpriority(int priority)
public void getPriority();
ユーザー定義のスレッドには、デフォルトのスレッド名スレッド+シーケンス番号があり、シーケンス番号は最初のスレッドがthread0であるなど、0から始まります。
スレッド名はsetName(string name)メソッドを介して設定でき、getname()メソッドを使用してスレッド名を取得できます。
パブリックファイナルボイドsetName(文字列名)
public final String getName()。
例
以下の例を見てみましょう。
パッケージdemo.ch; public class userthread extends thread {userthread(){super(); } userThread(string name){super(name); } public void run(){system.out.println( "スレッドが実行され始めた.."); } public static void main(string [] args){userthread thread1 = new userThread( "thread1"); userthread thread2 = new userThread( "thread2"); System.out.println( "スレッド1初期名と優先度"); System.out.println( "name:" + thread1.getName()); System.out.println( "priority:" + thread1.getPriority()); System.out.println( "スレッド2初期名と優先度"); System.out.println( "name:" + thread2.getPriority()); system.out.println( "priority:" + thread2.getPriority()); System.out.println( "");スレッド1.SetPriority(6); Thread2.SetPriority(9); System.out.println( "スレッド1初期名と優先度"); System.out.println( "name:" + thread1.getName()); System.out.println( "priority:" + thread1.getPriority()); System.out.println( "スレッド2初期名と優先度"); System.out.println( "name:" + thread2.getName()); system.out.println( "priority:" + thread2.getPriority()); System.out.println( ""); thread1.start(); thread2.start(); for(int i = 0; i <5; i ++)system.out.println( "main method i value:"+i); }}出力結果:
スレッド1初期名と優先順位名:Sthread1Priority:5Thread 2初期名と優先順位名:Sthread 2プリオリティ:5thread 1初期名と優先順位:スレッド2初期名と優先順位名:9mainメソッドI値I値:0mainメソッドI値I値I値。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!