这个StampedLock和其他锁的比较表明,随着争用的增加,StampedLock 是最快的。然而,这篇文章以及其他各种文章都没有列出它为什么更快。它似乎使用了与其他类型的锁相同的CAS语义?有人能解释一下为什么随着争用的增加它是最快的吗?
例如,在下面的代码中,writeLock 不仅阻塞其他 writeLock,还阻塞 readLock。我现在不关心 optimisticReadLock 等。只是普通的 writeLock… 它有什么优势,如何比 ReentrantLock 更快(而且它甚至没有可重入性)?
例如,在下面的代码中,writeLock 不仅阻塞其他 writeLock,还阻塞 readLock。我现在不关心 optimisticReadLock 等。只是普通的 writeLock… 它有什么优势,如何比 ReentrantLock 更快(而且它甚至没有可重入性)?
public static void main(String[]args)throws Exception{
StampedLock lk = new StampedLock();
new Thread(() -> {
long stamp = lk.writeLock();
try {
out.println("locked.. sleeping");
TimeUnit.SECONDS.sleep(5);
lk.unlock(stamp);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
long stamp = lk.writeLock();
try {
out.println("locked.. sleeping");
TimeUnit.SECONDS.sleep(5);
lk.unlock(stamp);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
tryOptimisticRead
在这里真的非常有用。 - John Vint