JAvaマルチスレッド(五)---synchronizedの実現原理と応用
1126 ワード
ステップjavaマルチスレッドシリーズ記事
1 synchronized同期の実現の基礎 Javaの各オブジェクトは、ロック として使用できます.は、具体的には以下の3つの形式で表される.1.通常の同期方法では、ロックは現在のインスタンスオブジェクトです.2.静的同期メソッドの場合、ロックは現在のクラスのClassオブジェクトです.3.同期メソッドブロックの場合、ロックは スレッドが同期コードブロックにアクセスしようとすると、まずロックを取得し、例外を終了または放出するとロックを解放する必要があります.
2 SynchonizedのJVMでの実現原理 JVM仕様からは、 しかし、方法の同期は、同様に、この2つの命令を用いて実現することができる. 任意のオブジェクトには、
注:
リファレンス
『java同時プログラミングの芸術』
1 synchronized同期の実現の基礎
Synchonized
カッコ内に配置されたオブジェクトである.2 SynchonizedのJVMでの実現原理
Synchonized
のJVMにおける実装原理が見られ、JVMは、Monitor
オブジェクトへのアクセスと終了に基づいて方法同期とコードブロック同期を実現するが、両者の実装の詳細は異なる.1.コードブロック同期は、monitorenter
およびmonitorexit
の命令を用いる実現される.メソッド同期は別の方法で実現され,詳細はJVM仕様では詳細に説明されていない.monitorenter
命令はコンパイル後に同期コードブロックの開始位置に挿入され、monitorexit
命令はメソッドの終了および異常に挿入され、JVMは各monitorenter
が対応するmonitorexit
をペアにしなければならないことを保証する.monitor
が関連付けられており、monitor
が保持されるとロックされます.スレッドがmonitorenter
命令を実行すると、オブジェクトに対応するmonitor
の所有権、すなわちオブジェクトのロックを取得しようと試みる.注:
synchronized
用のロックはJavaオブジェクトヘッダに存在します.リファレンス
『java同時プログラミングの芸術』