Java スレッドの 5 つの状態: 1. 初期状態。 2. 実行可能状態。実行可能スレッド プール内にあり、CPU を使用する権利を取得するためにスレッド スケジューリングによって選択されるのを待っています。 3. 実行ステータス。 4. ブロック状態は、スレッドが何らかの理由で CPU の使用権を放棄したことを意味します。 5. 死亡状態では、死亡したスレッドを復活させることはできません。
Java のスレッドのライフサイクルは、大きく 5 つの状態に分類できます。
1. 初期状態 (NEW): 新しいスレッド オブジェクトが作成されます。
2. 実行可能 (RUNNABLE): スレッド オブジェクトが作成された後、他のスレッド (メイン スレッドなど) がオブジェクトの start() メソッドを呼び出します。この状態のスレッドは実行可能なスレッド プール内にあり、CPU を使用する権利を取得するためにスレッド スケジューリングによって選択されるのを待っています。
3. RUNNING: 実行可能状態のスレッドは、CPU タイム スライス (タイムスライス) を取得し、プログラム コードを実行します。
4. ブロック済み: ブロックされた状態は、スレッドが何らかの理由で CPU を使用する権利を放棄したこと、つまり、CPU タイムスライスを放棄し、実行を一時的に停止したことを意味します。スレッドが実行可能状態になるまで、CPU タイムスライスを再度取得して実行状態に移行する機会があります。ブロッキング状況には 3 つのタイプがあります:
(1). ブロッキングの待機中: 実行中のスレッドは o.wait() メソッドを実行し、JVM はスレッドを待機キュー (待機中) に入れます。キュー)真ん中。
(2) 同期ブロック: 実行中のスレッドがオブジェクトの同期ロックを取得するときに、その同期ロックが別のスレッドによって占有されている場合、JVM はそのスレッドをロック プールに入れます。
(3) その他のブロック: 実行中のスレッドが Thread.sleep(long ms) または t.join() メソッドを実行するか、I/O リクエストを発行すると、JVM はスレッドを is in に設定します。ブロッキング状態。 sleep() 状態がタイムアウトになるか、join() がスレッドの終了を待つかタイムアウトになるか、I/O 処理が完了すると、スレッドは実行可能状態に戻ります。
5. 死 (DEAD): スレッドの run() メソッドと main() メソッドの実行が終了するか、例外により run() メソッドが終了すると、スレッドはそのライフサイクルを終了します。 。死んだスレッドを復活させることはできません。
1. スレッド状態図
##2. 初期状態
実装実行可能インターフェイススレッドはスレッドクラスを取得することができ、新しいインスタンスが出てくるとスレッドは初期状態に入ります#3. 実行可能状態#1. 実行可能状態スケジューラーがあなたを選択しなかったとしても、いつでも実行可能です。
2. スレッドの start() メソッドを呼び出すと、スレッドは実行可能状態になります。
3. 現在のスレッドの sleep() メソッドが終了し、他のスレッドの join() メソッドが終了します。ユーザー入力が完了すると、スレッドがオブジェクト ロックを取得し、これらのスレッドも開始されます。実行可能な状態。
4. 現在のスレッドのタイム スライスが使い果たされると、現在のスレッドの yield() メソッドが呼び出され、現在のスレッドは実行可能状態になります。
5. ロック プール内のスレッドがオブジェクト ロックを取得すると、実行可能状態になります。
4. 実行状態スレッド スケジューラが実行可能プールから現在のスレッドとしてスレッドを選択したときのスレッドの状態。これは、スレッドが実行状態に入る唯一の方法でもあります。
5. 死亡状態1. スレッドの run() メソッドが完了するか、メイン スレッドの main() メソッドが完了すると、私たちはそれが死んだと考えます。このスレッド オブジェクトは生きている可能性がありますが、個別に実行されるスレッドではなくなります。スレッドが終了すると、復活することはできません。
2. デッドスレッドで start() メソッドを呼び出すと、java.lang.IllegalThreadStateException 例外がスローされます。
6. ブロッキング状態1. 現在のスレッド T が Thread.sleep() メソッドを呼び出し、現在のスレッドはブロッキング状態になります。
2. 現在のスレッドで実行されている他のスレッド t2 が join() メソッドを呼び出し、現在のスレッドはブロッキング状態になります。
3. ユーザー入力を待機しているとき、現在のスレッドはブロッキング状態になります。
7. 待機キュー (本来は Object のメソッドですが、スレッドに影響します)1. obj の wait() メソッドと Notice() メソッドを呼び出す前, obj ロックは取得する必要があります。つまり、synchronized(obj) コード セグメントに書き込む必要があります。
2. 待機キューに関連する手順と図
- スレッド 1 はオブジェクト A のロックを取得し、オブジェクト A を使用しています。
- スレッド 1 は、オブジェクト A の wait() メソッドを呼び出します。
- スレッド 1 はオブジェクト A のロックを解放し、すぐに待機キューに入ります。
- ロック プール内のオブジェクトは、オブジェクト A のロックをめぐって競合します。
- スレッド 5 はオブジェクト A のロックを取得し、同期ブロックに入り、オブジェクト A を使用します。
- スレッド 5 はオブジェクト A の NoticeAll() メソッドを呼び出し、すべてのスレッドをウェイクアップし、すべてのスレッドがロック プールに入ります。 ||||| スレッド 5 は、オブジェクト A の Notice() メソッドを呼び出してスレッドを起動します。誰が起動されるかは不明です。起動されたスレッドはロック プールに入ります。
- 同期された notificationAll() メソッドが終了し、スレッド 5 がオブジェクト A のロックを解放します。
-
ロック プール内のスレッドはオブジェクト ロックをめぐって競合しますが、スレッド 1 がいつオブジェクト ロックを取得できるかは不明です。 ||||| ステップ 6 で元のロック プールで目覚めたスレッドは、オブジェクト ロックをめぐって一緒に競合します。
#8. ロック プールのステータス
現在のスレッドは同期メソッドを呼び出したいと考えていますオブジェクト A のロックが別のスレッドによって占有されていることが判明したとき、現在のスレッドはロック プール状態に入ります。つまり、ロック プールは、オブジェクト ロックを競合しようとするスレッドでいっぱいになります。 スレッド 1 が別のスレッド 2 によって起動されると、スレッド 1 はロック プール状態に入り、オブジェクト ロックを競合します。 ロックプールは同期環境のみに存在する概念であり、1つのオブジェクトがロックプールに対応します。9. いくつかのメソッドの比較
Thread.sleep(long millis)、このメソッドは現在のスレッドによって呼び出される必要があります。現在のスレッドはブロッキングに入りますが、ブロッキングに入りません。オブジェクトを解放すると、ロックとミリ秒が経過した後、スレッドが自動的に起動し、実行可能な状態になります。機能: 他のスレッドに実行の機会を与える最良の方法。 Thread.yield()、このメソッドは現在のスレッドによって呼び出される必要があります。現在のスレッドは取得した CPU タイム スライスを放棄し、実行状態から実行可能状態に変更し、OS がもう一度スレッドを立てます。機能: 同じ優先度のスレッドを順番に実行しますが、順番に実行されるという保証はありません。実際には、譲歩スレッドはスレッド スケジューラによって再度選択される可能性があるため、yield() が譲歩の目的を達成するという保証はありません。 Thread.yield() はブロッキングを引き起こしません。 t.join()/t.join(long millis)、現在のスレッドは他のスレッド 1 の join メソッドを呼び出します。現在のスレッドはブロックされますが、スレッド 1 が実行を完了するまでオブジェクト ロックを解放しません。ミリ時間が経過すると、現在のスレッドは実行可能状態になります。 obj.wait()、現在のスレッドはオブジェクトの wait() メソッドを呼び出し、現在のスレッドはオブジェクトのロックを解放し、待機キューに入ります。自動的に起動するには、notify()/notifyAll() を使用して起動するか、待機 (長いタイムアウト) タイムアウトを使用します。 obj.notify() は、このオブジェクト モニターを待機している単一のスレッドを起動します。選択は任意です。 NoticeAll() は、このオブジェクト モニターで待機しているすべてのスレッドを起動します。 推奨チュートリアル:「java チュートリアル」
以上がJava スレッドの状態は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









