ホームページ  >  記事  >  Java  >  Javaスレッドの状態は何ですか

Javaスレッドの状態は何ですか

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-12-27 14:53:105096ブラウズ

Javaスレッドの状態は何ですか

Java スレッドは作成および破棄できるため、スレッドにはライフサイクルがあり、スレッドのライフサイクルはスレッドの 6 つの状態によって説明できます。

Thread クラスのソース コードから、スレッドには 6 つの状態があることがわかります。これら 6 つの状態は次のとおりです:

1. 新規: 初期状態、スレッドが作成され、start() は呼び出されません。 Javaスレッドの状態は何ですか

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。