gpt4 book ai didi

java - 对可变对象的 volatile 引用——所有线程都可以看到对象字段的更新

转载 作者:搜寻专家 更新时间:2023-10-30 19:58:24 29 4
gpt4 key购买 nike

...没有额外的同步?下面的 Tree 类旨在被多个线程访问(它是一个单例但不是通过枚举实现的)

class Tree {

private volatile Node root;

Tree() {
root = new Node();
// the threads are spawned _after_ the tree is constructed
}

private final class Node {
short numOfKeys;
}
}
  • numOfKeys 字段的更新是否对读取器线程可见而无需任何显式同步(请注意,读取器和写入器都必须获取 ReentrantReadWriteLock 的实例 - 每个节点都具有相同的实例 - 但禁止那) ?如果不是,使 numOfKeys volatile 就足够了吗?
  • 更改根是否像 root = new Node() 一样简单(除了调用 Tree 构造函数的主线程之外,只有编写器线程会更改根)

相关:

编辑:对后 Java 5 语义感兴趣

最佳答案

没有。

volatile 字段中放置对对象的引用不会以任何方式影响对象本身。

一旦从可变字段加载对象的引用,您就拥有了一个与任何其他对象都没有区别的对象,并且可变性没有进一步的影响。

关于java - 对可变对象的 volatile 引用——所有线程都可以看到对象字段的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23855677/

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