マルチスレッドと並行性の高い2-volitile、同期、CAS

投票

変数変数は、
コマンドの再配置を禁止する、スレッドの視認性を確保します。しかし、原子性を保証していません

volitileシナリオ

レイジーDCL、ダブルシンクを確認します

volitileプロパティ

命令の再配置を禁止

CPUの実現:LFENCE、SFENCE、MFENCE原始的な
JVM実装SS、LL、SL、LSバリア
Volitile達成:終了書き込み操作の後に読み込まれるだけ
だけ読み取り後書き込み操作への読み取り操作

視界のスレッドを確認してください

ハードウェアCPU、キャッシュ・コヒーレンシ・プロトコル(MESI)
速やかに作業メモリによっては、スレッド間の視認性を確保するため、メインメモリに書き込まれます。

同期洗練粗大化

改良:サービスロジックは同期方法のほんの一部を必要とする場合、この方法は、全体をロックする必要がない
粗化:複数の部分をロックするプロセスでサービスロジックは、それが直接ロック方法に好適である場合

ポイントの同期を使用

1、同期がオブジェクトをロックされて、オブジェクトがロックされている場合、オブジェクトは問題が発生します変更。オブジェクトが最後の文を追加することであるときに
2を、ロックとしてString型のオブジェクトを持っていない可能性が高いプログラムとライブラリの使用同じロックであるため、デッドロックは、可能性が高い原因の障害物にあります

CAS(ロックなしの最適化、スピン、楽観的ロック)

比較とスワップ:安全でありません

CAS(値、期待、NEWVALUE)
E V ==のIF
V ==新しい新しい
そうでない場合は試してみるか、失敗再び
CPU原始的支援、操作がインサートに許可されていません

ABAの問題:スレッドA-> B、BAのスレッド。参照型は、問題(修飾を受けた引用)ではなく、基礎となるデータ型の問題を抱えています。
バージョン数を増やすことによって決定される(AN AtomicStampedReference)

JUC下では、原子のパケットでCAS実装されています

安全でありません

ダイレクト・メモリ操作:allocateMemory
直接生成されたクラスのインスタンス:allocateInstance
ダイレクトアクションクラスやインスタンス変数:getObjectメソッド
CAS関連の操作:コンペア・アンド・スワップオブジェクトのint長いです

公開された25元の記事 ウォンの賞賛0 ビュー585

おすすめ

転載: blog.csdn.net/RaymondCoder/article/details/105068800