使用StampedLock

/ **

読書のプロセスはまた、書き込み後の書き込みロックを獲得することができ:*そしてReadWriteLockはStampedLock、前記改善を比較しました!その結果、我々は一貫性がなくなりますデータの読み出しと、それゆえ、読書の書き込み処理は、これは楽観的読み取りロックロックであるかどうかを判断するために少し余分なコードが必要です。
*オプティミスティック・ロック手段が書き込まれません高い確率を読み取るプロセスは、それは楽観的ロックと呼ばれていることを楽観的です。
*悲観的ロックが読書の過程にあるが待機する必要があります書かれている書き込みに拒否しています。
*オプティロック並行性は、明らかに高効率であるが、書き込まれたデータを読み出すに矛盾した結果の小さい確率、それを検出できるようにする必要がある場合、行に再びそれを読みます。
* StampedLock楽観的読み取りロックが設けられ、さらに並行性ReadWriteLockを改善するために置換されていてもよく;
* StampedLockはリエントラントロックされない、同じロックを取得するスレッドで繰り返すことができません
* /

TestStampedLock {クラス
民間最終StampedLock stampedLock新しい新StampedLock =();
プライベートダブルX;
プライベートダブルY;

ます。public void移動(ダブルX1、Y1ダブル){
ロングスタンプstampedLock.writeLock =(); //書き込みロックの獲得
の試行{
X + X1 =;
Y = Y1 +;
} {最後に
stampedLock.unlockWrite(スタンプ); //書き込みロック解除
}
}

公共ダブルdistanceFromOrigin(){
//楽観的読み取りロックを取得し 
、長いスタンプ= stampedLock.tryOptimisticRead(); //あり競争戻っ0

ダブルCurrentX = X-;
ダブルCurrentY = y軸;
//指定したスタンプの起動時に排他ロックを取得しない場合は、trueを返します。
//スタンプは、常にfalseを返し、ゼロの場合。
正しいスタンプが保持されたロックを示している場合//、常にtrueを返します。
{IF(!stampedLock.validate(スタンプ))
stampedLock.readLockを=(スタンプ); //悲観的な読み取りロックを取得します。
{試み
CurrentX = X;
CurrentY = Y;
} {最後に
stampedLock.unlockRead(スタンプ); //リードロック解除悲観
}
}
N //戻りの正しく丸められたdouble値の平方根
戻りMath.sqrt(currentX * currentX + * CurrentY CurrentY);
}

}

おすすめ

転載: www.cnblogs.com/wueryuan/p/12073086.html