マインドマップギャラリー Javaの同時実行性
これは、Java の同時実行性に関するマインド マップであり、主な内容には、ロック、スレッド プール、同時コンテナー、および基本概念が含まれます。
2024-04-22 19:41:17 に編集されました人件費の管理は、企業が経済的利益を最大化するための重要な手段です。企業は、課題に対処するために中核となる競争力を継続的に向上させる必要があります。
これは教育技術のガイドではなく、教育の雰囲気を見つける旅です。読者の皆さん、この本では、それぞれの教育的な物語を通して、本当の教育者がどうあるべきかがわかります。繊細で機知に富み、子供たちにとって何が適切で何が不適切かを知っていて、何を言うべきか、何を言ってはいけないのか、注意を払うのかを知っています。子どもの個性を尊重し、子どもの個々の生活世界に注意を払い、子どもの話を「見る」「聞く」方法を知ってください。真の教育者だけが子どもの心を理解し、似非教育の調子を整え、教育と成長をより美しく充実したものにすることができるのです。
この本では、著者は、ほとんどの人が知識とスキルを学ぶのに適した一連の学習方法を詳細にまとめています。著者の意見では、あらゆる学習は、正確なインプット、深い消化、そして複数のアウトプットという 3 つの段階に分けられると考えています。 1 つ目は知識のインプットです。これは、最初に新しい知識を取り入れ、次に知識を消化し、インプットされた知識を理解し、最後に学んだ知識を使用することを意味します。この本が、学習中に混乱している人、または新しいスキルの学習方法がわからないすべての人に役立つことを願っています。
人件費の管理は、企業が経済的利益を最大化するための重要な手段です。企業は、課題に対処するために中核となる競争力を継続的に向上させる必要があります。
これは教育技術のガイドではなく、教育の雰囲気を見つける旅です。読者の皆さん、この本では、それぞれの教育的な物語を通して、本当の教育者がどうあるべきかがわかります。繊細で機知に富み、子供たちにとって何が適切で何が不適切かを知っていて、何を言うべきか、何を言ってはいけないのか、注意を払うのかを知っています。子どもの個性を尊重し、子どもの個々の生活世界に注意を払い、子どもの話を「見る」「聞く」方法を知ってください。真の教育者だけが子どもの心を理解し、似非教育の調子を整え、教育と成長をより美しく充実したものにすることができるのです。
この本では、著者は、ほとんどの人が知識とスキルを学ぶのに適した一連の学習方法を詳細にまとめています。著者の意見では、あらゆる学習は、正確なインプット、深い消化、そして複数のアウトプットという 3 つの段階に分けられると考えています。 1 つ目は知識のインプットです。これは、最初に新しい知識を取り入れ、次に知識を消化し、インプットされた知識を理解し、最後に学んだ知識を使用することを意味します。この本が、学習中に混乱している人、または新しいスキルの学習方法がわからないすべての人に役立つことを願っています。
Javaの同時実行性
基本的な考え方
プロセス
ヒープ
メソッド領域
ヒープとメソッド領域は、すべてのスレッドによって共有されるリソースです。ヒープはプロセス内で最大のメモリ部分であり、主に新しく作成されたオブジェクトを格納するために使用されます (ほぼすべてのオブジェクトがここでメモリを割り当てます)。オブジェクト。クラス情報、定数、静的変数、ジャストインタイム コンパイラによってコンパイルされたコード、およびその他のデータ。
糸
プログラムカウンター
仮想マシンスタック
ネイティブメソッドスタック
プロセス内には複数のスレッドが存在でき、複数のスレッドはプロセスのヒープおよびメソッド領域 (JDK1.8 以降のメタスペース) リソースを共有しますが、各スレッドには独自のプログラム カウンター、仮想マシン スタック、およびローカル メソッド スタックがあります。
同時
平行
メモリ リーク、デッドロック、スレッドの安全性の低下を容易に引き起こす可能性がある
同期する
非同期
スレッドの安全性
スレッドを作成する
スレッドのライフサイクルとステータス
新しい
準備完了 (実行可能)
ランニング
ブロックされました
同期ブロッキング (ブロック済み)
ブロック待ち(WAITING)
タイムアウト待機ブロック(TMME-WAITING)
死亡 (死亡/終了)
スレッドコンテキストの切り替え
スレッドのデッドロック
デッドロックに必要な 4 つの条件
デッドロックを防ぐ方法
トラブルシューティングの方法
グラフィカル: jconsole
jps -l はプログラムのプロセス番号、jstack のプロセス番号を調べます。
JMM
意味
背景
CPUとキャッシュの一貫性
プロセッサの最適化
命令の並列並べ替え
コンパイラ最適化の再配置
記憶システムの再配置
同時実行理論
as-if-serial ルール
前に発生するルール
プログラムシーケンスのルール
モニターロックルール
揮発性変数のルール
推移性ルール
start() ルール
join() ルール
3つの大きな特徴
原子性
可視性
秩序
同時実行の問題を解決する方法
3大キーワード
揮発性の
可視性
原理以前に起こる
原理
書き込みメモリセマンティクス
メモリのセマンティクスを読み取る
秩序
メモリセマンティクスの実装
同期した
効果
原子性
秩序
可視性
書き込みメモリセマンティクス
メモリのセマンティクスを読み取る
使用法
インスタンスメソッドを修飾する
静的メソッドを変更する
コードブロックを装飾する
原理
同期されたコードブロック
同期メソッド
Javaオブジェクトモデル
オブジェクトヘッダー
マークワード
クラスポイント
インスタンスデータ
バイトアライメント
ロックのアップグレード
ロックなし
ロック状態
バイアスロック
ロック状態
アップグレード時間
具体的な操作
利点
バイアスされたスレッド ID は現在のスレッド ID と一致しません。
競争の成功
競争に失敗しました
技術的な実現
軽量ロック
ロック状態
アップグレード時間
効果
スピン
バイアスロックとバイアスロックの違い
重量級ロック
ロック状態
アップグレード時間
原理
jdk1.6の最適化
スピンロック
アダプティブスピンロック
ロックの解除
ロックの粗面化
バイアスロック
軽量ロック
最後の
効果
ルールの並べ替え
最終フィールドの並べ替えルールを記述する
最終フィールドを読み取るための並べ替えルール
記憶障壁
同時コンテナ
リスト
CopyOnWriteArrayList
ベクター
セット
CopyOnWriteArraySet
地図
同時ハッシュマップ
同時スキップリストマップ
ハッシュ表
列
配列ブロックキュー
LinkedBlockingQueue
優先ブロッキングキュー
同期キュー
スレッドプール
意味
アドバンテージ
リソース消費量の削減
応答速度の向上
スレッドの管理性の向上
作成方法
遺言執行者
固定スレッドプール
シングルスレッドエグゼキュータ
無制限の LinkedBlockingQueue が使用されている可能性があります。タスク キューの最大長は Integer.MAX_VALUE です。大量のリクエストが蓄積され、OOM が発生する可能性があります。
キャッシュされたスレッドプール
同期キュー SynchronousQueue が使用され、作成できるスレッド数は Integer.MAX_VALUE です。
スケジュールされたスレッドプール
無制限の遅延ブロッキング キュー DelayedWorkQueue が使用されます。タスク キューの最大長は Integer.MAX_VALUE であり、大量のリクエストが蓄積され、OOM が発生する可能性があります。
スレッドプールエグゼキュータ
共通パラメータ
コアプールサイズ
最大プールサイズ
ワークキュー
キープアライブ時間
ユニット
スレッドファクトリー
ハンドラ
ポリシーの中止
CallerRunsポリシー
ポリシーの破棄
最も古いポリシーを破棄
タスクの処理プロセス
スレッドプールのサイズを設定する方法
理論的アルゴリズム
経験的方法
CPU 負荷の高いタスク (N 1)
I/O 集中型タスク (2N)
未来のクラス
タスクをキャンセルする
タスクがキャンセルされたかどうかを確認する
タスクが完了したかどうかを判断する
タスクの実行結果を取得する
欠点がある
完成可能な未来
Futureの欠点を解決する
アドバンテージ
完成段階
ロック
基本的な考え方
悲観的なロック
アドバンテージ
悲観的ロックのコストは固定されています
欠点がある
激しいロック競合によりスレッドのブロックが発生する可能性がある
多数のスレッドがブロックされると、システムのコンテキスト切り替えが発生します。 システムパフォーマンスのオーバーヘッドの増加
悲観的ロックもデッドロックの問題を引き起こす可能性があります
該当シーン
複数のシナリオと激しい競争を作成します (パフォーマンスに影響を与える頻繁な失敗や再試行を避けるため)
楽観的ロック
アドバンテージ
スレッドのブロックを引き起こすロックの競合はありません
デッドロックの問題は発生しません
欠点がある
競合が頻繁に発生する (大量の書き込みが発生する) 場合、失敗と再試行が頻繁に発生します。
該当シーン
複数の読み取りシナリオ、競合の減少 (パフォーマンスに影響を与える頻繁なロックを回避できます)
実行計画
バージョン番号のメカニズム
CASアルゴリズム
ABAに関する質問
長いサイクル時間と高いオーバーヘッド
共有変数に対するアトミック操作のみが保証されます
スレッドローカル
効果
原理
ハッシュアルゴリズム
ハッシュの競合
メモリリークの問題
理由
解決
AQS
本旨
州
CLHキュー
構造
原理
アドバンテージ
優れたパフォーマンス、ロックの取得と解放のオーバーヘッドが低い。
フェアロック
実装が簡単で理解しやすい
強力な拡張性
欠点がある
スピン操作では、ロックが長時間保持されると大きな CPU オーバーヘッドが発生します。
単一機能であり、複雑な機能をサポートできない
CLHコホートバリアント
AQS はスピン操作をブロッキング スレッド操作に変更します
ロックデータ構造の改善
各ノードの状態を拡張する
信号
伝播する
状態
キャンセル
先行ノードと後続ノードを明示的に保守する
デキューノードを明示的に null に設定するなど、補助 GC の最適化
回路図
共有ロック
排他ロック
リエントラントロック
とは
原理
不正なロック処理
スレッド 1 が正常にロックされた場合
AQS内部データ
スレッド 2 のロックに失敗しました
CLHキューの状況
スレッド 3 のロックに失敗しました
フェアロックロック処理
ロック解除プロセス
ロックを解除する手順
キューデータを待っています
最終キューデータ
状態
実施原則
リエントラント読み取り書き込みロック
該当シーン
スレッドは読み取りロックを保持している場合でも書き込みロックを取得できますか?
読み取りロックを書き込みロックにアップグレードすることはできません
セマフォ
2つのモード
フェアモード
不公平なモデル
原理
カウントダウンラッチ
効果
原理
使い捨て
サイクリックバリア
アトミッククラス
基本タイプ
アトミック整数
アトミックロング
アトミックブール値
配列型
AtomicIntegerArray
AtomicLongArray
アトミックリファレンス配列
参照型
アトミックリファレンス
AtomicStampedReference
オブジェクトプロパティの変更タイプ
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicReferenceFieldUpdater