在类ReentrantReadWriteLock在下面的好奇评论:Java实例变量的可见性(ThreadLocal的)
transient ThreadLocalHoldCounter readHolds;
Sync() {
readHolds = new ThreadLocalHoldCounter();
setState(getState()); // ensures visibility of readHolds
}
这是什么意思“确保能见度”?我问的原因是我有一种情况,看起来线程本地readHolds正在重置(线程本地被实现为WeakReferences,所以只要包含的Sync对象仍然存在,就不应该发生)。 setState/getState只需更改另一个实例变量,不要触碰readHolds。
你可以显示setState()/ getState()吗? – notnoop
这里有一个例子:http://fuseyism.com/classpath/doc/java/util/concurrent/locks/AbstractQueuedSynchronizer-source.html –