3月13日java学习笔记
锁优化与StampedLock
- StampedLock特性
三种模式:
写锁(独占):writeLock()
悲观读锁(共享):readLock()
乐观读(无锁):tryOptimisticRead()
锁转换:支持读锁升级为写锁(可能死锁,需谨慎)
- 代码示例
class Point {
private double x, y;
private final StampedLock lock = new StampedLock();
// 写操作
void move(double deltaX, double deltaY) {
long stamp = lock.writeLock();
try {
x += deltaX;
y += deltaY;
} finally {
lock.unlockWrite(stamp);
}
}
// 乐观读
double distanceFromOrigin() {
long stamp = lock.tryOptimisticRead();
double currentX = x, currentY = y;
if (!lock.validate(stamp)) { // 检查是否被修改
stamp = lock.readLock(); // 退化为悲观读
try {
currentX = x;
currentY = y;
} finally {
lock.unlockRead(stamp);
}
}
return Math.sqrt(currentX * currentX + currentY * currentY);
}
}
浙公网安备 33010602011771号