0

synchronizedReentrantLock の Java API を調べたところ、キーワードで同期が使用されていないことがわかりました。オブジェクトを同期するのは、AbstractQueuedSynchronizer (ロックを取得しようとするときに ReentrantLock が参照している) の以下のメソッドにありますか? はネイティブ メソッドであるためcompareAndSwapInt、同期はネイティブ レベル/コードで行われますか?

protected final boolean compareAndSetState(int expect, int update) {
    // See below for intrinsics setup to support this
    return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
}
4

2 に答える 2

3

実装は、JDK ごとに異なる可能性があります。たとえば、Sun(現在のOracle)の実装は、sun.misc.Unsafehttp://www.docjar.com/docs/api/sun/misc/Unsafe.html)を介してそれを行います

私は以前、 Java の同時実行が安全ではないことについてブログに書きました:)

于 2012-04-27T13:57:01.550 に答える
1

おっしゃる通りです。Oracle の JDK では、キーワードではなくReentrantLock、ネイティブの比較とスワップのプリミティブ (およびその上にあるかなりの量の Java コード) の観点から実装されています。synchronized

于 2012-04-27T13:56:53.393 に答える