Javaコンカレントプログラミングコンバットパート2学習記録

ここに画像の説明を挿入

14 |ロックと条件(パート1):並行パッケージに隠された隠された

並行プログラミングの分野では、2つの中心的な問題があります。1つは相互排除、つまり1つのスレッドだけが同時に共有リソースにアクセスできること、もう1つは同期、つまりスレッド間の通信とスレッド間の連携方法です。これら2つの主要な問題は、管理プロセスによって解決できます。Java SDK コンカレントパッケージは、ロックと条件の2つのインターフェイスを介して管理プロセスを実装ます。ロックは相互排他問題を解決するために使用され、条件は同期問題を解決するために使用されます。

リエンジニアリングの理由

ここに画像の説明を挿入
これらの3つのプログラムは、同期の問題を補うことができます。これらの3つのソリューションが「ホイールを再作成」する主な理由であり、APIに反映されています。これは、ロックインターフェースの3つのメソッドです。詳細は次のとおりです。

// 支持中断的API
void lockInterruptibly() throws InterruptedException;
// 支持超时的API
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
// 支持非阻塞获取锁的API
boolean tryLock();

可視性を確保する方法

揮発性に関連するHappens-Beforeルールを使用します

再入可能ロックとは

フェアロックとアンフェアロック

ロックを使用するためのベストプラクティス

オブジェクトのメンバー変数を更新するときのみ常にロックします。
変数メンバー変数にアクセスするときのみ常にロックします。
他のオブジェクトのメソッドを呼び出すときはロックしません

15 |ロックと条件(パート2):ダボはどのようにパイププロセスを使用して非同期転送同期を実現しますか?

では、2つの条件変数を使用してブロッキングキューをすばやく実装するにはどうすればよいでしょうか。

同期および非同期

ダボソースコード分析

16 |セマフォ:電流リミッターをすばやく実装する方法は?

セマフォモデル

セマフォの使い方

電流リミッターをすばやく実装

セマフォにより、複数のスレッドがクリティカルセクションにアクセスできます。

実際にそのような需要はありますか?ええ より一般的な要件は、接続プール、オブジェクトプール、スレッドプールなど、作業中に遭遇するさまざまなプールされたリソースです。それらの中で、データベース接続プールに最も精通している可能性があります。同時に、複数のスレッドが接続プールを同時に使用できるようにする必要があります。もちろん、各接続は、解放されるまで他のスレッドによる使用を許可されていません。

17 | ReadWriteLock:完全なキャッシュをすばやく実装する方法は?

読み書きロックとは何ですか?

キャッシュをすばやく実装する

キャッシュのオンデマンドロードを実装する

読み取り/書き込みロックのアップグレードとダウングレード

18 | StampedLock:読み取り/書き込みロックよりも速いロックはありますか?

StampedLockがサポートする3つのロックモード

ReadWriteLockは2つのモードをサポートします。1つは読み取りロック、もう1つは書き込みロックです。StampedLockは、書き込みロック、悲観的な読み取りロック、楽観的な読み取りの3つのモードをサポートしています。

楽観的な読書のさらなる理解

StampedLockの使用に関する注意

19 | CountDownLatchおよびCyclicBarrier:マルチスレッドのペースを一貫させる方法は?

並列最適化調整システムを使用する

CountDownLatchを使用してスレッド待機を実現する

パフォーマンスをさらに最適化

CyclicBarrierを使用してスレッド同期を実現する

20 |同時コンテナ:どの「ピット」を埋める必要がありますか?

同期コンテナーとその考慮事項

リスト、マップ、セットおよびキュー

並行コンテナーとその考慮事項

ここに画像の説明を挿入
ここに画像の説明を挿入
(1)リスト
(2)マップ
(3)セット
(4)キュー

  1.单端阻塞队列 2.双端阻塞队列 3.单端非阻塞队列 4.双端非阻塞队列

21 | Atomic:ロックフリーツールのモデル

ロックフリー方式の実装原理

原子の概要

ここに画像の説明を挿入

  1. 原子データ型
  2. 原子オブジェクト参照タイプ
  3. 原子配列
  4. 原子オブジェクト属性アップデーター
  5. 噴霧アキュムレータ

22 |エグゼキューターとスレッドプール:正しいスレッドプールを作成する方法

スレッドプールはプロデューサー/コンシューマーモデルです

Javaでスレッドプールを使用する方法

スレッドプールを使用するときに注意すべきこと

23 |将来:マルチスレッドを使用して最高の「ボイルティー」プログラムを実現する方法?

タスクの実行結果を取得する方法

最適な「水を燃やしてお茶を作る」プログラムを実現する

24 | CompletableFuture:非同期プログラミングはそれほど難しくありません

CompletableFutureの主な利点

CompletableFutureオブジェクトを作成する

CompletionStageインターフェースを理解する方法

CompletionStageインターフェースがシリアル関係、AND集約関係、OR集約関係、および例外処理を記述する方法。

  1. シリアル関係を説明する
  2. 説明と収束
  3. OR収束について説明する
  4. 例外処理

25 | CompletionService:非同期タスクをバッチで実行する方法は?

CompletionServiceを利用したお問い合わせシステムの実現

では、どのようにCompletionServiceを作成するのでしょうか。

CompletionServiceインターフェースの説明

CompbionServiceを使用してダボでForking Clusterを実現する

26 | Fork / Join:スタンドアロンバージョンのMapReduce

単純な並列タスクの場合、「スレッドプール+フューチャー」ソリューションを使用できます。タスク間に集約関係がある場合、それがAND集約かOR集約かに関係なく、CompletableFutureを介して解決できます。 CompletionServiceで解決できます。

タスクモデルの分割統治

フォークの使用/参加

ForkJoinPoolの仕組み

MapReduceをシミュレートして単語数をカウントする

27 |同時ツールモジュールのホットな問題への回答

各記事の最後に思いを残す

1.(true)は心配していません

2. signalAll()は常に人々を心配させる

3.セマフォにはロック間ロックが必要

4.ロックの適用と解除はペアで表示される必要があります

5.コールバックは常に実行のスレッドが誰であるかを気にします

6.共有スレッドプール:祝福と共有には困難が伴う

7.オンラインで問題を特定するためのツール:スレッドスタックダンプ

138の元の記事を公開 賞賛3 訪問7211

おすすめ

転載: blog.csdn.net/weixin_43719015/article/details/105668197