Java スレッドは作成および破棄できるため、スレッドにはライフサイクルがあり、スレッドのライフサイクルはスレッドの 6 つの状態によって説明できます。
Thread クラスのソース コードから、スレッドには 6 つの状態があることがわかります。これら 6 つの状態は次のとおりです:
1. 新規: 初期状態、スレッドが作成され、start() は呼び出されません。
2. 実行可能: 実行状態. Java スレッドは、オペレーティング システムの準備完了と実行の 2 つの状態を「実行中」と呼びます。3. ブロック化: ブロック化され、スレッドは待機状態になり、スレッドは何らかの理由で CPU の使用権を放棄します。
ブロッキングのいくつかの状況: A. ブロッキングの待機: 実行中のスレッドが wait() を実行し、JVM は現在のスレッドを待機キューに入れます。 B. 同期ブロッキング: 実行中のスレッドがオブジェクトの同期ロックを取得するときに、同期ロックが他のスレッドによって占有されている場合、JVM は現在のスレッドをロック プールに入れます。 C. その他のブロッキング: 実行中のスレッドが sleep()、join() を実行するか、IO リクエストを発行すると、JVM は現在のスレッドをブロッキング状態に設定します。 () スレッドが終了すると、IO 処理が完了した後にスレッドが再び再開されます。 4. 待機中: 待機状態。 5. timed_waiting: タイムアウト待機状態、タイムアウト後に自動的に戻ります。 6.terminated: 終了ステータス、現在のスレッドは実行を完了しました。スレッドの 6 つの状態間の変換:
スレッドがインスタンス化されると、最初に初期状態、つまり New 状態に入ります。 、スレッドが開始します すぐには実行されませんが、オペレーティング システムが実行する前にスケジュールするまで待機し、その後 start() を呼び出して実行状態 (実行可能) に入ります。実行状態には、実行中と準備完了の 2 つの状態が含まれます。 2 つの状態は、オペレーティング システムのスケジューリングに基づいて相互に変換できます。実行中のスレッドのタイム スライスが CPU によってプリエンプトされると、準備完了状態になります。実行中のスレッドは、同期メソッドを呼び出すことによってブロック状態になります。スレッドがロックを取得した後、実行状態に入ります; スレッドが実行中に sleep()、wait().join()、Locksupported.parkUtil() およびその他のメソッドを呼び出すと、スレッドは待機状態 (waiting) またはタイムアウト待機状態 (timed_waiting) に入り、notify()、notifyAll()、Locksupported.unpark() およびその他のメソッドを再度呼び出すと、再びランタイム状態になります。実行が完了すると、終了状態、つまり終了状態になります。 注: Locksupported は、JDK 1.6 によって提供されるツール クラスです。java.util.concurrent パッケージでは、Locksupported が提供する park および unpark メソッドは、wait および Notice メソッドよりも柔軟です。コマンド ラインを使用してスレッド ステータスを表示する
最初に 2 つのコマンドを紹介します:1. Jps:JDK 1.5 は、現在のすべての Java の表示を提供します。 process pid コマンドを使用して、対応するプロセス pid を取得できます。2. Jstack: Java 仮想マシンに付属するスタック トレース ツールで、指定されたプロセス PID 情報とリモート デバッグ サービスの Java スタック情報を出力できます。
具体的な手順:
ターミナルまたはコマンド ライン ツールを開き、jps コマンドを入力して pid を取得します。jstack pid と入力して、現在のプロセス情報。
PHP 中国語 Web サイトには、無料の
JAVA 入門チュートリアルが多数あり、誰でも学習できます。
以上がJavaスレッドの状態は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。