ホームページ > Java > &#&チュートリアル > Javaのマルチスレッド知識の要約と分析

Javaのマルチスレッド知識の要約と分析

不言
リリース: 2018-09-18 17:17:15
オリジナル
1741 人が閲覧しました

この記事は、Java のマルチスレッドに関する知識の概要と分析を提供します。必要な方は参考にしていただければ幸いです。

プロセスの概要

  1. プロセス: 実行中のプログラムは、システムによるリソースの割り当てと呼び出しのための独立した単位です。

  2. #プロセスは、データ セットに対するプログラムの動的実行プロセスです。

  3. プロセスは通常、プログラム、データ セット、プロセス制御ブロックの 3 つの部分で構成されます。

  4. 各プロセスには独自のメモリ空間とシステム リソースがあります。

  5. 私たちが作成するプログラムは、プロセスがどのような機能を完了する必要があるか、およびそれをどのように完了するかを記述するために使用されます。プログラムは実行中に使用します。

  6. プロセス制御ブロックは、プロセスの外部特性を記録し、システムの実行変更プロセスを記述するために使用されます。これを使用してプロセスを制御および管理できます。これはシステム認識プロセスです。固有の識別子が存在します。

  7. プロセスの例:

  8. (1) 料理の腕が高いコンピューター科学者が娘のために誕生日ケーキを焼いていると想像してください。 # (2) 彼は誕生日ケーキを作るためのレシピを持っており、小麦粉、卵、砂糖などの必要な材料をキッチンに持っています。

    (3) この比喩では、ケーキを作るためのレシピがプログラムです。

    (4) コンピューター科学者はプロセッサー CPU です。
  9. (5) ケーキを作るためのさまざまな原材料は、入力データ。
(6) プロセスは、シェフがレシピを読み、さまざまな材料を入手し、ケーキを焼くという一連の動作の合計です。

(7) さて、コンピューター科学者の息子が泣きながら出てきて、頭を蜂に刺されたと言うとします。
(8) コンピューター科学者はレシピに従って何をしたかを記録し、それを保存することです。プロセスの現在の状態;
(9) 次に、応急処置マニュアルを取り出し、その指示に従ってください。
(10) この時点で、プロセッサーが 1 つのプロセスから別のプロセスに切り替わっていることがわかります。優先度の高いプロセス;
(11) 各プロセスには独自のプログラム (レシピと応急処置マニュアル) があり、
(12) 蜂に刺された後、コンピューター科学者がケーキを作りに戻ります。 (13) 中断したところから続けます。

スレッドの概要

スレッドの出現は、コンテキスト切り替えの消費を削減し、システムの同時実行性を向上させることを目的としています。

スレッドは、プロセスが 1 つのことしか実行できないという欠点を克服し、プロセス内の同時実行を可能にします。

スレッド例:

(1) テキスト プログラムがキーボード入力を受け取り、内容を画面に表示し、その情報をハードディスクに保存する必要があるとします。

(2) プロセスが 1 つしかない場合、同時に実行できることは 1 つだけという恥ずかしさが必然的に生じます。つまり、保存時にキーボード入力ができなくなります。複数のプロセスがある場合、各プロセスは 1 つのタスクを担当します。

(4) プロセス A はキーボード入力を担当し、プロセス B は画面上のコンテンツの表示を担当し、プロセス C はコンテンツをハードウェアに保存します。ディスク;

(5) ここでの A、B、および C 間のコラボレーションにはプロセス通信の問題が関係しており、それらはすべて同じ内容です: テキスト コンテンツ;

(6) 継続的な切り替えによりパフォーマンスが低下します。

(7) A、B、および C がリソースを共有できるメカニズムがある場合;

(8) この方法では、コンテキストの切り替えのために保存および復元する必要があるコンテンツが少なくなります。 ) 同時に、通信によるパフォーマンスの損失を軽減できます。

(10) この機構はスレッドです。

スレッドは軽量プロセスとも呼ばれます。

CPUの基本的な実行単位であり、プログラム実行プロセスの最小単位です。

スレッド ID、プログラム カウンター、レジスタ セット、およびスタックで構成されます

スレッドの導入により、プログラムの同時実行のオーバーヘッドが削減され、オペレーティング システムの同時実行パフォーマンスが向上します。

スレッドには独自のシステム リソースがありません。

プロセスとスレッドの関係

プロセスとは、コンピューター内の特定のデータ収集におけるプログラムの実行アクティビティです。

プロセスは、システム内のリソース割り当てとスケジューリングの基本単位であり、オペレーティング システム構造の基礎です。プロセスのエンティティであり、CPU のスケジューリングとディスパッチの基本単位です。

  1. スレッドはプロセスより小さく、独立して実行できます。

  2. 関係プロセスとスレッドの間:

  3. (1) スレッドは 1 つのプロセスにのみ属することができ、プロセスは複数のスレッドを持つことができますが、少なくとも 1 つのスレッドが存在します

    (2)リソースはプロセスに割り当てられ、同じプロセス すべてのスレッドがプロセスのすべてのリソースを共有します

    (3) CPU がスレッドに割り当てられます。つまり、スレッドは実際には cpu
  4. Java 上で実行されます。プログラムの動作原理

  5. java コマンドは Java 仮想マシンを開始します。つまり、JVM を開始します。これは、アプリケーションを開始する、つまりプロセスを開始するのと同じです。

  6. #プロセスは自動的にメイン スレッドを開始します。



その後、メイン スレッドは特定のクラスの main メソッドを呼び出します。

    つまり、main メソッドはメインスレッドで実行され、これより前のすべてのプログラムはシングルスレッドです。
  1. jvm の起動はマルチスレッドです。

(1) jvm の開始時にガベージ コレクション スレッドも開始する必要があるため、そうしないとメモリ オーバーフローが発生しやすくなります。
(2) 現在のガベージ コレクション スレッドと前のメイン スレッド。 、少なくとも 2 つのスレッドが開始されるため、jvm の起動はマルチスレッドになります。

マルチスレッドに関するコンテンツはいくつかの部分に分かれています:

  1. 良いスタートを切りましょう: スレッドのステータス

  2. ##内力メソッド:各オブジェクトが持つメソッド(仕組み)

  3. 太祖長泉:基本スレッドクラス

  4. 九陰マニュアル:上級マルチ-スレッド制御クラス

Zhahaomabu: スレッドのステータス (5 種類)

  1. New: スレッド オブジェクトが作成されたときの新しい状態、つまりThread t = new MyThread()

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

  3. # の実行直後に実行されることを意味するものではありません。 ## 実行中: 実行中状態。CPU が準備完了状態でスレッドのスケジュールを開始すると、その時点でスレッドは実際に実行可能になります。つまり、実行中状態になります。

  4. Blocked: ブロック状態。実行状態のスレッドは、何らかの理由で CPU の使用権を一時的に放棄し、実行を停止し、準備完了状態になるまでブロック状態になります。 . 状態、実行状態に入るために CPU によって再び呼び出される可能性があります。

  5. Dead: 死亡状態。スレッドは実行を終了したか、次の理由により run() メソッドを終了しました。例外が発生し、スレッドはライフ サイクルを終了します

  6. 注:

    (1) 準備完了状態は、実行状態への唯一の入り口です

    (2)スレッドが実行のために実行状態に入りたい場合は、まず準備完了状態でなければなりません。
    (3) ブロッキングの原因に応じて、ブロッキング状態は 3 つのタイプに分類できます。
    [1 ] ブロッキング待ち: 実行状態のスレッドが wait() メソッドを実行することで、ブロッキング待ち状態になります。
    [2] 同期ブロッキング: スレッドが同期ロックの取得に失敗した場合 (原因:ロックが他のスレッドによって占有されている場合)、同期ブロッキング状態に入ります。
    [3] その他のブロッキング: スレッドの sleep() または join() を呼び出すか、I/O リクエストが発行されると、スレッドは同期ブロッキング状態に入ります。ブロッキング状態。 sleep() 状態がタイムアウトになるか、join() がスレッドの終了を待つかタイムアウトになるか、I/O 処理が完了すると、スレッドは再度準備完了状態になります。 メソッド: 各オブジェクトにはメソッド
    # があります。 ##synchronized、wait、notify はどのオブジェクトにも備わっている同期ツールです

    monitor:

  7. (1) 同期の問題に適用されます 人工スレッド スケジューリング ツール
(2) 各 Java オブジェクト同時実行コードの再入を監視するモニターがあります。

(3) 非マルチスレッドコーディング中はモニターは役割を果たしません。逆に、同期範囲内であればモニターは役割を果たします。

wait/notify: 両方が存在する必要があります。同期ブロック内

これらの 3 つのキーワードは同じモニターをターゲットとしています。つまり、待機後に他のスレッドが実行のために同期ブロックに入ることができます

#Taizu Changquan: 基本スレッド クラス



スレッド クラス

実行可能クラス

    ##呼び出し可能クラス
  1. Jiuyin Zhenjing: 高度なマルチスレッド制御クラス
  2. ThreadLocal クラス:

  3. (1) スレッドを保存するために使用される反対の変数
  4. (2) 変数を維持するために ThreadLocal が使用される場合、ThreadLocal は各スレッドですこの変数を使用すると、変数の独立したコピーが提供されるため、各スレッドは、他のスレッドの対応するコピーに影響を与えることなく、独自のコピーを独立して変更できます。

    (3) セッション情報の記録など、ユーザーのログイン制御に一般的に使用されます。

  5. アトミック クラス (AtomicInteger/AtomicBoolean)

ロック クラス: ReentrantLock/ReentrantReadWriteLock.ReadLock/ReentrantReadWriteLock.WriteLock

以上がJavaのマルチスレッド知識の要約と分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート