gpt4 book ai didi

java - 构造函数中的两个 "volatile"变量是否遵循Happens-before关系?

转载 作者:行者123 更新时间:2023-11-30 11:00:11 24 4
gpt4 key购买 nike

下面是 Java7 中 ConcurrentHashMap 的一个例子:

static final class HashEntry<K,V> {
final int hash;
final K key;
volatile V value;
volatile HashEntry<K,V> next;

HashEntry(int hash, K key, V value, HashEntry<K,V> next) {
this.hash = hash;
this.key = key;
this.value = value;
this.next = next;
}

那么如果一个线程看到next字段,是否保证value字段不为null


更新:

所以如果我限制在我的测试中 value 不能在初始化后修改,并且 null 值不能由构造函数分配,采用 的线程next 获取 HashEntry 永远不会将 value 视为 null

最佳答案

在呈现的构造函数代码中,对value 的赋值将始终被视为发生在对next 的赋值之前。但是,在推理并发代码中的不变量时必须非常小心。可能有其他线程同时执行分配给 value 的其他代码。由于您的问题已经假设该实例已发布到其他线程,因此几乎不可能确保没有其他作者。

最后,请注意,根据给出的代码,value 实际上可能在一开始就被分配为 null

关于java - 构造函数中的两个 "volatile"变量是否遵循Happens-before关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31634632/

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