ReentrantReadWriteLock是如何工作的?是自转锁吗?
这个问题来自Elasticsearch,当它显示
java.lang.ThreadLocal$ThreadLocalMap.expungeStaleEntry(Unknown Source)
java.lang.ThreadLocal$ThreadLocalMap.remove(Unknown Source)
java.lang.ThreadLocal$ThreadLocalMap.access$200(Unknown Source)
java.lang.ThreadLocal.remove(Unknown Source)
java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryReleaseShared(Unknown Source)
java.util.concurrent.locks.AbstractQueuedSynchronizer.releaseShared(Unknown Source)
java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.unlock(Unknown Source)在热线程中,所有快照和cpu的使用率都很高。看上去像是自旋锁。
发布于 2016-03-23 23:47:22
有一个与线程本地数据相关的成本。你在这里看到的正是这个。您甚至可以在ReentrantReadWriteLock中看到这样的注释,通过缓存线程本地数据的数据来对其进行优化:
评论:
/**
* The hold count of the last thread to successfully acquire
* readLock. This saves ThreadLocal lookup in the common case
* where the next thread to release is the last one to
* acquire.
* [...]
*/
private transient HoldCounter cachedHoldCounter;ReentrantReadWriteLock不使用自旋锁.它使用Sync对象,该对象使用来自AbstractQueueSynchronizer的等待/通知(由AbstractQueueSynchronizer(This)实现)。
https://stackoverflow.com/questions/35658900
复制相似问题