スレッドが実行可能状態と実行状態の間でどのように前後に移動するのかを知りたいと思います。実際に何が起こっているのでしょうか。これはThreadPoolの場合には必要になるでしょうが、完全に理解できません。私はこれを理解する。スレッドは実行状態から実行可能状態にどのように移行しますか?
答えて
スレッドが実行状態にある場合、その実行run()メソッドとするときにその実行可能な方法でを意味します実行中のstart()メソッド....実行中から実行可能に移動することは、run()からstart()に戻ることを意味します。
ほとんどのオペレーティングシステムの命名法では、「実行中」とはスレッドが実際にはあるCPU上で命令を実行していることを意味し、「実行可能」とは実行するCPUの利用可能性を除いてスレッドが「実行中」を妨げないことを意味します。
Javaプログラムは、これらの2つの状態の違いを認識できません。 Javaが知っているスレッド状態はNEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、およびTERMINATEDです。
t.start()
が呼び出される前にスレッドがNEWであり、その後にNEWに戻ることはできません。 WAITINGとTIMED_WAITINGはどちらも、スレッドが他のスレッドでnotify()
呼び出しを待っていることを意味します。 BLOCKEDは他のものを待っていることを意味します(たとえば、ブロックを入力する)。終了は終了したことを意味します。
Yield
は、現在実行中のスレッドに、スレッドプール内の等しい優先度を持つスレッドにチャンスを与えるように指示する静的メソッドです。
Yield
は、現在実行中のスレッドをすぐに実行可能状態にする保証はありません。 yieldメソッドがスレッドをWaitまたはBlocked状態にすることがないという重要な点を忘れないでください。 Running StateからRunnable Stateへのスレッドのみを作成できます。 JavaのSCJP認定にAプログラマーズ・ガイドから
'yield()'はめったに呼び出されませんが、ここで働く主要なメカニズムではありません。コードではないテキストにはコード書式を使用しないでください。 – EJP
@Anand .....説明をくれてありがとうございます。ちょっと疑問が残っています....コードで手動で歩留まりを使用します...そうですか? JVMはこれをどのように処理しますか? –
* "Yieldが現在実行中のスレッドをすぐに実行可能状態にするという保証はありません。" * ...確かに。 Thread.yield()が呼び出されたときにJVMが全く何もしないことは、まったく受け入れられます。 Thread.yield()の正確さのためにThread.yield()の動作に依存するプログラムは、非移植性の高いプログラムであり、最悪の場合深刻な欠陥を持つプログラムです。 – scottb
エキス:スレッド:
静的な無効収量() このメソッドは、一時的にその実行を一時停止し、それによって、他のスレッドを実行できるようにするために、現在のスレッドの原因となります。この移行がいつ実行されるかは、JVMによって決定されます。
static void sleep(long millisec)throws InterruptedException 現在のスレッドは、指定された時間スリープしてから再び実行可能になります。
最終無効例外:InterruptedExceptionがスローされます)(参加 最終のボイド(長いミリ秒)スレッドのいずれかが完了したか、それがタイムアウトするまで戻り待機しませんスレッドで呼び出されたこれらの2つの方法のいずれかへの呼び出しInterruptedExceptionある をスロー参加指定された時間後にそれぞれ。
void interrupt() このメソッドは、呼び出されたスレッドを中断します。通知の待機、スリープ、またはブロックされた結合の完了状態では、スレッドはInterruptedExceptionを受け取ります。
以下の例は、スレッド状態間の遷移を示しています。 (1)のスレッドは(2)で少し眠った後、(3)のループで何らかの計算を行い、その後スレッドが終了します。 main()メソッドは(4)のループ内のスレッドを監視し、getState()メソッドによって返されたスレッド状態を出力します。 run()メソッドの実行が開始されるとスレッドはRUNNABLE状態を経て、TIMED_WAITING状態に遷移しスリープ状態になります。起動時には、RUNNABLE状態のループを計算し、run()メソッドが終了するとTERMINATED状態に遷移します。
例:米国
public class ThreadStates {
private static Thread t1 = new Thread("T1") { // (1)
public void run() {
try {
sleep(2); // (2)
for(int i = 10000; i > 0; i--); // (3)
} catch (InterruptedException ie){
ie.printStackTrace();
}
}
};
public static void main(String[] args) {
t1.start();
while(true) { // (4)
Thread.State state = t1.getState();
System.out.println(state);
if (state == Thread.State.TERMINATED) break;
}
}
}
プログラムから出力可能スレッド:
RUNNABLE
TIMED_WAITING
...
TIMED_WAITING
RUNNABLE
...
RUNNABLE
TERMINATED
- 1. 状態s1から状態s2にランダムに行く確率
- 2. ツリー検索の保存実行状態
- 3. wait()とjoin()の両方を実行すると、実行スレッドが「待機」状態になりますか?
- 4. スレッドが実行可能状態のときにオブジェクトがロックされないのはなぜですか?
- 5. スレッドが起動していない状態から実行中に遷移するタイミング
- 6. 行挿入状態
- 7. JavaFX WebEngineが「実行中」の状態になっています
- 8. アニメーションを実行して元の状態に戻す
- 9. 自己消化および実行状態に戻る?
- 10. Autosysジョブは実行状態のままです
- 11. デバイスがスリープモードに移行したときのアクティビティの状態は?
- 12. Oracle XEデータベースで休止状態を実行しています
- 13. IOS5:アイコンが非実行状態でバッジしています
- 14. ネストされた状態のコントローラは実行されません
- 15. 休止状態:MappingException)(getHibernateTemplateを実行すると、クエリに
- 16. Javaプロセスが実行状態にあり、CPUを消費する
- 17. Macがスリープ状態に入る直前のコマンドを実行
- 18. 移動はオブジェクトを使用可能な状態のままにしますか?
- 19. 状態パターンを使用するオブジェクトは、次の状態にどのように移行する必要がありますか?
- 20. この状態でクロスドメインAjaxを実行する方法は?
- 21. FutureTaskの実行状態を取得する方法は?
- 22. QtでGUIスレッドがアイドル状態のときにSIGNALを発行しますか?
- 23. pthreadスレッド状態
- 24. 状態が変化したときにイベント遷移を実行するRuby/Rails状態マシンは存在しますか?
- 25. iOS - タスクをスケジュールする - 実行していない状態
- 26. Pythonスレッドの実行はどのように引数を実行しますか?
- 27. 無効な実行状態を処理する方法は?
- 28. Linqpadでクエリを再実行する間に、どのような状態が保存されますか?
- 29. は、私は次のコマンドを実行しようとしています(postfixの状態のために)ファイルに
- 30. matlab - 元の状態行列に移動ベクトルフィールドマトリックスを適用する
なぜ知りたいですか?私はこれも知らないが、そのような知識なしで 'ThreadPool'をうまく使っている。 –
スレッドが実行状態にあるということは、実行中のrun()メソッドを意味し、runnableメソッドが実行中のstart()メソッドを実行している場合.... run()からstart()に戻る...私がマルチスレッドの初心者であるときに私が間違っていれば私を修正してください。 –
私はこの質問が好きです。もしそれが欺瞞でないならば、私はそれを開いたままにします。 –