gpt4 book ai didi

Java——对象的创建和可见性

转载 作者:行者123 更新时间:2023-12-01 17:57:18 26 4
gpt4 key购买 nike

给出以下代码:

class MyObj{
AtomicLong counter;

public MyObj(){
count = new AtomicLong();
}
}

MyObj obj = new MyObj();
// start a few threads that referencey obj and access counter

我想知道这里是否存在潜在的情况,即由于编译器重新排序/内联,创建的线程会将 MyObj 的状态视为不完整?例如,他们可能会看到 counter = null,或者计数器部分创建,因为它不是最终字段?

最佳答案

有两种情况:

  • 如果MyObj obj = new MyObj()之后启动线程,则存在发生在之前的关系,可确保线程都会看到正确构造的对象
  • 如果您之前启动线程,则无法保证任何事情(它们可能会观察到 obj == nullobj != null && obj.counter == nullobj != null && obj.counter != null)。

关于Java——对象的创建和可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43669165/

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