ホームページ よくある問題 スレッドのライフサイクルはいくつかの段階に分かれています

スレッドのライフサイクルはいくつかの段階に分かれています

Feb 21, 2023 pm 04:24 PM
ライフサイクル

5 段階: 1. New (新しいメソッドを使用して作成されたばかりのスレッド) 2. Ready (スレッドの start() メソッドを呼び出した後) この時点で、スレッドはCPU がリソースを割り当てるのを待っている段階にあります; 3. 実行中、準備ができたスレッドがスケジュールされて CPU リソースを取得すると、実行状態になります; 4. ブロッキング、実行中状態では、実行中状態のスレッドは何らかの理由でブロックされた場合; 5. 破棄 : スレッドが通常の実行を完了するか、スレッドが事前に強制終了されるか、例外が発生した後、スレッドは破棄されます。

スレッドのライフサイクルはいくつかの段階に分かれています

このチュートリアルの動作環境: Windows 7 システム、Dell G3 コンピューター。

スレッドのライフサイクルは、新規、準備完了、実行中、ブロック、破棄の 5 つの段階で構成されます。完全なライフ サイクル図は次のとおりです。

スレッドのライフサイクルはいくつかの段階に分かれています

スレッドが実行状態になると、一般的なオペレーティング システムはプリエンプティブな方法を使用して、スレッドが CPU を取得できるようにします。したがって、CPU は複数のスレッド間で切り替える必要があるため、スレッドのステータスは実行中、ブロック中、準備完了の間で複数回切り替わります。

1. 新しい (新しい)

##新しい : 新しい方法を使用すると、新しいものが生まれますout スレッドでは、現時点では、JAVA 仮想マシンのみがそれにメモリを割り当て、メンバー変数の値を初期化します。 現時点では単なるオブジェクトです。

2. Ready (実行可能)

Ready: と呼ばれます。スレッドの start() メソッドの後、スレッドは CPU がリソースを割り当てるのを待っている段階になります。最初に CPU リソースを取得した人が実行を開始します。 スレッドは準備完了状態になり、
JAVA 仮想マシンが実行されます。マシンは、そのマシンのメソッド呼び出しスタックとプログラム カウンタ を作成します。スレッドの実行は基盤となるプラットフォームによって制御され、ある程度のランダム性があります。

3. 実行中

##Running

: 準備完了スレッドがスケジュールされたとき CPU リソースが不足したときrun メソッドはスレッドの動作と機能を定義します (準備完了状態のスレッドが CPU を獲得すると、run() メソッドが実行されます) シングルコアの場合CPU (またはコア) は同時に 1 つの命令しか実行できませんが、JVM は命令を実行するスレッドを素早く切り替えることでマルチスレッドを実現します。実際のプロセッサは同時に 1 つの命令を処理できますが、この切り替え速度はは非常に高速であり、まったく実行しません。スレッド切り替え後に正しい実行位置を復元するために、各スレッドは独立したプログラムカウンタを持ち、各スレッド間のカウンタは互いに影響を与えずに独立して格納されます。 スレッドが実行を開始すると、スレッドが常に CPU を保持することはできません (スレッドの実行本体が非常に短く、実行が即座に終了する場合を除く)。したがって、他のスレッドが実行のために CPU にアクセスできるようにするには、スレッドの実行中に中断する必要があります。スレッド スケジューリングの詳細は、基盤となるプラットフォームで採用される戦略によって異なります。

4. ブロックされました ブロックされました: 実行状態では、何らかの理由で発生する可能性があります 実行中のスレッドブロックされてしまう。その理由は次のとおりです。

1.等待I/O流的输入输出
2.等待网络资源,即网速问题
3.调用sleep()方法,需要等sleep时间结束
4.调用wait()方法,需要调用notify()唤醒线程
5.其他线程执行join()方法,当前线程则会阻塞,需要等其他线程执行完。
ログイン後にコピー

状態切り替え図は次のとおりです。


スレッドのライフサイクルはいくつかの段階に分かれています

# #5. 破棄(終了)#スレッドが通常の実行を完了した場合、事前にスレッドが強制終了された場合、または例外が発生した場合、スレッドは破棄され、リソースが解放されます。

1. run()/call() メソッドが実行され、スレッドが正常に終了します;

2. スレッドがキャッチされなかった例外またはエラーをスローします;

3. スレッドの stop( ) メソッドを使用してスレッドを終了します。このメソッドはデッドロックを引き起こしやすいため、通常はお勧めできません。



拡張知識: CPU タイム スライス

オペレーティング システム レベルで水晶発振器が存在します。これは、僧侶が鐘を鳴らすのに少し似ています。数秒ごとにベルが鳴ります。衝突は短期間に 1 回発生し、CPU 時間をタイム スライスに分割します。各スレッドは実際にタイム スライスを 1 つずつ取得し続けます。タイム スライスがポイントに達した後も、再度取得する必要があります (すべてのスレッドが CPU を取得して独自のロジックを実行できるようにするため (公平性)

新しい状態

次のコード部分を見てみましょう:

Thread t1 = new Thread();
ログイン後にコピー

ここでの作成はJAVAというプログラミング言語レベルで作成されているだけで、オペレーティングシステムレベルでは実際のスレッドはまだ作成されていません。 start() メソッドを呼び出した場合にのみ、スレッドが作成され、Runnable 状態になります。 start() メソッドを呼び出した場合にのみ、スレッドが作成されます。

さらに関連する知識については、

FAQ

列を参照してください。

以上がスレッドのライフサイクルはいくつかの段階に分かれていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

8コア16スレッドとはどういう意味ですか? 8コア16スレッドとはどういう意味ですか? Feb 02, 2023 am 11:26 AM

8 コアは、CPU に 8 つの物理コアがあることを意味し、16 スレッドは、CPU が同時にタスクを処理できる最大 16 のスレッドを持つことができることを意味します。コアとスレッドの数は、コンピュータ CPU の重要なパフォーマンス指標です。CPU のコア数が多いほど、処理速度は高くなります。スレッドの数が多いほど、複数のプログラムを同時に実行しやすくなります。スレッドの数は、ある瞬間に CPU が同時に実行できる数、つまり並列処理されるタスクの数に相当するためです。マルチスレッドにより、広範囲にわたる問題の順序が狂ったスーパースカラー処理を最大化し、プロセッサ コンピューティング コンポーネントの利用率を向上させ、データ相関やキャッシュ ミスによって引き起こされるメモリ アクセスの遅延を軽減できます。

vue3 ではいくつかのライフサイクル関数が変更されました vue3 ではいくつかのライフサイクル関数が変更されました Jan 13, 2023 pm 05:57 PM

vue3 では 4 つのライフサイクル関数が変更されました。 Vue3 結合 API では beforeCreated および created フック関数をキャンセルし、代わりにステップ フックを使用するため、これは使用できません。 Vue3 のコンポーネント破棄のフック関数は、destroyed および beforeDestroy から beforeUnmount および unmounted に変更されました。

C++ 関数ポインターの破棄とライフサイクル管理にどのように対処するか? C++ 関数ポインターの破棄とライフサイクル管理にどのように対処するか? Apr 17, 2024 pm 05:48 PM

C++ では、関数ポインターには適切な破棄とライフサイクル管理が必要です。これは、関数ポインタを手動で破棄し、メモリを解放することで実現できます。 std::unique_ptr や std::shared_ptr などのスマート ポインターを使用して、関数ポインターのライフ サイクルを自動的に管理します。関数ポインターをオブジェクトにバインドすると、オブジェクトのライフサイクルによって関数ポインターの破棄が管理されます。 GUI プログラミングでは、スマート ポインターを使用するか、オブジェクトにバインドすることで、コールバック関数が適切なタイミングで破棄され、メモリ リークや不整合が回避されます。

サーブレットのライフサイクルはいくつかの段階に分かれています サーブレットのライフサイクルはいくつかの段階に分かれています Feb 23, 2023 pm 01:46 PM

サーブレットのライフ サイクルは、サーブレットの作成から破棄までのプロセス全体を指し、次の 3 つの段階に分けることができます: 1. 初期化段階、init() メソッドを呼び出してサーブレットを初期化する; 2. 実行段階 (リクエストの処理)、コンテナは、HTTP リクエストを表す ServletRequest オブジェクトと HTTP レスポンスを表す ServletResponse オブジェクトの作成を要求し、それらをパラメータとしてサーブレットの service() メソッドに渡します; 3. 破棄フェーズ。

C++ 同時プログラミング: スレッドの枯渇と優先順位の逆転を回避するには? C++ 同時プログラミング: スレッドの枯渇と優先順位の逆転を回避するには? May 06, 2024 pm 05:27 PM

スレッドの枯渇を回避するには、公平なロックを使用してリソースの公平な割り当てを確保するか、スレッドの優先順位を設定します。優先順位の逆転を解決するには、リソースを保持しているスレッドの優先順位を一時的に高める優先順位の継承を使用するか、リソースを必要とするスレッドの優先順位を高めるロック プロモーションを使用します。

Vue3 のライフサイクル機能: Vue3 のライフサイクルをすばやくマスターします Vue3 のライフサイクル機能: Vue3 のライフサイクルをすばやくマスターします Jun 18, 2023 am 08:20 AM

Vue3 は現在、フロントエンドの世界で最も人気のあるフレームワークの 1 つであり、Vue3 のライフサイクル機能は Vue3 の非常に重要な部分です。 Vue3 のライフサイクル機能を使用すると、特定の時間に特定のイベントをトリガーすることができ、コンポーネントの高度な制御性が向上します。この記事では、読者が Vue3 のライフ サイクル機能をすぐにマスターできるように、Vue3 のライフ サイクル機能の基本概念、各ライフ サイクル機能の役割と使用法、実装事例を詳しく調べて説明します。 1. Vue3のライフサイクル機能

vue3 のライフサイクルとは何ですか vue3 のライフサイクルとは何ですか Feb 01, 2024 pm 04:33 PM

vue3 の生命期間:1、作成前;2、作成済み;3、マウント前;4、マウント済み;5、更新前;6、更新済み;7、破棄前;8、破棄済み;9、アクティブ化済み;10、非アクティブ化済み;11、エラーキャプチャ済み;12 、getDerivedStateFromProps など

C++ 同時プログラミング: スレッドの終了とキャンセルを行うには? C++ 同時プログラミング: スレッドの終了とキャンセルを行うには? May 06, 2024 pm 02:12 PM

C++ のスレッド終了およびキャンセル メカニズムには次のものがあります。 スレッド終了: std::thread::join() は、ターゲット スレッドが実行を完了するまで現在のスレッドをブロックします。 std::thread::detach() は、ターゲット スレッドをスレッド管理から切り離します。スレッドのキャンセル: std::thread::request_termination() はターゲット スレッドに実行の終了を要求します。 std::thread::get_id() はターゲット スレッド ID を取得し、std::terminate() とともに使用してターゲットを即座に終了できます。糸。実際の戦闘では、request_termination() によってスレッドが終了のタイミングを決定でき、join() によってメインラインでそれが保証されます。