Javaのライフサイクル

クラスのライフサイクル:

まず、クラスはコンパイラーを通じて .class バイトコード ファイルにコンパイルされ、次に JVM のインタープリターを通じてさまざまなオペレーティング システム用のマシン コードにコンパイルされます。オペレーティング システムは異なりますが、インタープリタ ベースの仮想マシンは同じです。Java クラスのライフサイクルとは、クラス ファイルのロードからアンロードまでのプロセス全体を指します。   

Java クラスの完全なライフサイクルは、ロード、接続、初期化、使用、アンロードの5 つの段階を経ます。

スレッドのライフサイクル:

新しい状態(New): スレッド オブジェクトのペアが作成されると、次のような新しい状態になります。 Thread t = new MyThread();

準備完了状態(Runnable): スレッド オブジェクトの start() メソッド (t.start();) が呼び出されると、スレッドは準備完了状態になります。スレッドが準備完了状態にあるということは、スレッドがいつでも CPU スケジューリングの実行を待機していることを意味しており、t.start() の実行直後にスレッドが実行されることを意味するわけではありません。

実行状態(実行中): CPU が準備完了状態でスレッドのスケジュールを開始すると、その時点でスレッドは実際に実行可能になります。つまり、実行状態になります。注: 準備完了状態は、実行状態への唯一の入り口です。つまり、スレッドが実行のために実行状態に入ろうとする場合は、まず準備完了状態でなければなりません。

ブロック状態(Blocked): 実行状態のスレッドが何らかの理由で一時的に CPU の使用権を放棄し、実行を停止し、ブロック状態に入ります。 CPU は準備完了状態になるまで再び実行状態になります。ブロックのさまざまな理由に応じて、ブロック ステータスは 3 つのタイプに分類できます。

1. ブロック待ち: 実行状態のスレッドが wait() メソッドを実行すると、このスレッドはブロック待ち状態になります。

2. 同期ブロッキング - スレッドが同期ロックの取得に失敗した場合 (ロックが他のスレッドによって占有されているため)、同期ブロッキング状態に入ります。

3. その他のブロッキング -- スレッドは、スレッドの sleep() または join() を呼び出すか、I/O リクエストを発行することによってブロッキング状態に入ります。sleep() 状態がタイムアウトになるか、join() がスレッドの終了を待つかタイムアウトになるか、I/O 処理が完了すると、スレッドは準備完了状態に戻ります。

デッド状態(Dead): スレッドは実行を終了したか、例外により run() メソッドを終了し、スレッドはライフサイクルを終了します。

Bean のライフサイクル:

1. Bean をインスタンス化します。これを私たちがよく新しいと呼ぶものです。

    2. Spring コンテキスト (つまり、IOC インジェクション) に従ってインスタンス化された Bean を構成します。

    3. この Bean が BeanNameAware インターフェースを実装している場合、実装されている setBeanName(String) メソッドが呼び出され、ここで渡されるのは Spring 設定ファイル内の Bean の ID 値です。

    4. この Bean が BeanFactoryAware インターフェースを実装している場合、setBeanFactory(実装されている setBeanFactory(BeanFactory)) を呼び出し、Spring ファクトリ自体を渡します (このメソッドを使用して他の Bean を取得できます。Spring 構成で通常の Bean を構成するだけです)ファイルは可能です);

    5. この Bean が ApplicationContextAware インターフェースを実装している場合、setApplicationContext(ApplicationContext) メソッドが呼び出され、Spring コンテキストが渡されます (同じメソッドでステップ 4 の内容を実装することもできますが、ApplicationContext は 4 よりも優れています。 BeanFactory のサブインターフェースであり、その他の実装メソッドがあります)。

    6. この Bean が BeanPostProcessor インターフェースに関連付けられている場合、postProcessBeforeInitialization(Object obj, String s) メソッドが呼び出されます。BeanPostProcessor は Bean の内容を変更するためによく使用され、このメソッドは Bean の最後に呼び出されます。初期化は、メモリまたはキャッシュ技術にも適用できます。

    7. Spring 設定ファイルで Bean が init-method 属性で設定されている場合、その設定された初期化メソッドが自動的に呼び出されます。

    8. この Bean が BeanPostProcessor インターフェースに関連付けられている場合、postProcessAfterInitialization(Object obj, String s) メソッドが呼び出されます。

    注: 上記の作業が完了したら、この Bean を適用できます。この Bean はシングルトンなので、通常、同じ ID で Bean を呼び出すと、同じコンテンツ アドレスを持つインスタンスになります。非シングルトンの場合は、ここでは詳しく説明しません。

    9. Bean が不要になると、クリーンアップ フェーズが実行されます。Bean が DisposableBean インターフェイスを実装している場合は、実装されている destroy() メソッドが呼び出されます。

    10. 最後に、この Bean の Spring 構成で destroy-method 属性が構成されている場合、その構成された破棄メソッドが自動的に呼び出されます。

Ich denke du magst

Origin blog.csdn.net/qq_52915133/article/details/121775970
Empfohlen
Rangfolge