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:ロックフリーツールのモデル
ロックフリー方式の実装原理
原子の概要
- 原子データ型
- 原子オブジェクト参照タイプ
- 原子配列
- 原子オブジェクト属性アップデーター
- 噴霧アキュムレータ
22 |エグゼキューターとスレッドプール:正しいスレッドプールを作成する方法
スレッドプールはプロデューサー/コンシューマーモデルです
Javaでスレッドプールを使用する方法
スレッドプールを使用するときに注意すべきこと
23 |将来:マルチスレッドを使用して最高の「ボイルティー」プログラムを実現する方法?
タスクの実行結果を取得する方法
最適な「水を燃やしてお茶を作る」プログラムを実現する
24 | CompletableFuture:非同期プログラミングはそれほど難しくありません
CompletableFutureの主な利点
CompletableFutureオブジェクトを作成する
CompletionStageインターフェースを理解する方法
CompletionStageインターフェースがシリアル関係、AND集約関係、OR集約関係、および例外処理を記述する方法。
- シリアル関係を説明する
- 説明と収束
- OR収束について説明する
- 例外処理
25 | CompletionService:非同期タスクをバッチで実行する方法は?
CompletionServiceを利用したお問い合わせシステムの実現
では、どのようにCompletionServiceを作成するのでしょうか。
CompletionServiceインターフェースの説明
CompbionServiceを使用してダボでForking Clusterを実現する
26 | Fork / Join:スタンドアロンバージョンのMapReduce
単純な並列タスクの場合、「スレッドプール+フューチャー」ソリューションを使用できます。タスク間に集約関係がある場合、それがAND集約かOR集約かに関係なく、CompletableFutureを介して解決できます。 CompletionServiceで解決できます。
タスクモデルの分割統治
フォークの使用/参加
ForkJoinPoolの仕組み
MapReduceをシミュレートして単語数をカウントする
27 |同時ツールモジュールのホットな問題への回答
各記事の最後に思いを残す