3月13日java学习笔记

锁优化与StampedLock

  1. StampedLock特性
    三种模式:

写锁(独占):writeLock()

悲观读锁(共享):readLock()

乐观读(无锁):tryOptimisticRead()

锁转换:支持读锁升级为写锁(可能死锁,需谨慎)

  1. 代码示例

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);
}

}

posted @ 2025-03-15 23:49  头发少的文不识  阅读(11)  评论(0)    收藏  举报