Java スレッドのライフサイクル (Xiaobi も理解できます)

ライフサイクルとは何ですか?

        いわゆるライフサイクルは、人の誕生から死までのプロセスとして理解できます。スレッドについても同様で、新しいスレッドオブジェクトの作成からスレッドの終了までの全プロセスが当てはまります~~~~

 スレッドライフサイクルの図と説明(インタビューでよくある質問

 補足知識:(個人的な理解)

        sleep: スレッドはスリープし、ロックを解放しませんが、スレッドを一時停止状態に保ちます。

        wait: スレッドは待機し、現在のロックが解放され、実行を続行するにはロックを取得する必要があります。

        blockend: スレッドはロック オブジェクトを取得していないためブロックされていますが、待ち時間が経過しています。

        通知: スレッドが起動し、スレッドを起動して待機状態から実行可能状態に変更します (ロックを取得します)。

上記はスレッドの安全性に関する考慮事項に基づいており、ロックされています。

  • まず、新しいスレッド オブジェクトを作成し、start() でそれを開始します。この時点でスレッドは実行可能な状態になります。
  • スレッドの実行が完了するか、例外が発生すると、スレッドは即座に終了します (つまり、私たちがよく「死」と呼びます)。
  • 実行可能状態では、オブジェクトのロックが解除されているため、スレッドはブロック状態になります。
  • ロック オブジェクトが取得されると、スレッドは実行可能な状態に変換されます。
  • 実行中のプログラムでは、共有リソースが条件を満たしていないため、スレッドはwait()メソッドを呼び出して待機し、共有リソースを解放するスレッドが条件を満たした共有リソースを解放すると起床(通知)します。このとき、スレッドはロックオブジェクトを取得できた場合は実行可能状態に変換され、ロックオブジェクトを取得できなかった場合はブロック状態に変換され、ロックオブジェクトは取得されません。ロック オブジェクトが取得されるまで実行可能な状態に変換されます。
  • 実行可能状態のプログラムがスリープ(ミリ秒値)を呼び出し、スレッドはタイミング待ち状態となりスリープしますが、このときロックオブジェクトは解放されず、スリープ時間が経過するまでスレッドはデッドロック状態となります。 、スレッドは最後まで実行を続けます。
  • 実行可能状態のスレッド、呼び出し待ち(ミリ秒値)、スレッドはスリープとは異なるタイミング待機状態に入り、スレッドはロックオブジェクトを解放します。これはこの時点の待機(wait)状態に似ていますが、待ち時間が経過すると、ロック オブジェクトは直接実行可能状態に入ることができ、そうでない場合はブロックされます。時間が経過していない場合はウェイクアップでき、ロック オブジェクトが取得されると、実行可能な状態。それ以外の場合はブロックされます。

経験:

        上記は私の独学での理解ですので、間違っていたらご指摘ください。

おすすめ

転載: blog.csdn.net/qq_61544409/article/details/126473361