gpt4 book ai didi

Java 实例变量可见性(ThreadLocal)

转载 作者:行者123 更新时间:2023-12-04 07:02:11 35 4
gpt4 key购买 nike

在类(class)ReentrantReadWriteLock以下是奇怪的评论:

transient ThreadLocalHoldCounter readHolds;

Sync() {
readHolds = new ThreadLocalHoldCounter();
setState(getState()); // ensures visibility of readHolds
}

“确保可见性”是什么意思?我问的原因是我有一种情况,看起来好像线程本地 readHolds 正在被重置(线程本地实现为 WeakReferences,因此只要包含 Sync 对象仍然存在,就不应该发生这种情况)。 setState/getState 只是改变另一个实例变量,不要触及 readHolds。

最佳答案

setState(int)方法执行对 volatile 变量的赋值。这会导致当前线程执行的任何分配(包括 readHolds)被刷新到“主内存”。

其他线程调用 getState()读取相同的 volatile 变量。由于变量是 volatile 的,线程的缓存首先被清除,迫使后续的读操作去到主存,在那里他们会找到readHolds的最新值。 .

关于Java 实例变量可见性(ThreadLocal),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1675268/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com