gpt4 book ai didi

Java 使用 Final 安全发布

转载 作者:行者123 更新时间:2023-12-01 04:12:44 24 4
gpt4 key购买 nike

只是为了确定一下。我正在阅读《Java 并发实践》一书。当谈到安全发布时,尤其是使用 Final 时,我很清楚,首先,引用对所有其他线程都是可见的,其次,已发布对象的状态对任何其他线程都是可见的,但这里的问题是,如果引用的数组元素保证在其发布的状态下可见? (当然,只要没有人修改这些数据对象)。

示例:

@Mutable
public class NotThreadsafeDataObject {

private String message;

public NotThreadsafeDataObject (String message) {
this.message = message;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

}

现在让我们安全地发布可变对象数组:

public class Publish {

public final NotThreadsafeDataObject[] publish;

public Publish() {
publish = new NotThreadsafeDataObject[] { new NotThreadsafeDataObject("one"), new NotThreadsafeDataObject("two")};

}

}

最佳答案

如果我们用“Java 并发实践”中提出的术语来说,那么您的数组是一个“有效不可变”的对象。对于此类对象,安全发布始终是不破坏内部状态所必需的。所以你的代码没问题,因为你使用的是安全发布。更具体地说,“final”关键字内存语义保证访问 Final 字段的线程将看到在写入该字段之前发生的所有事情(“happen-before”建立)。

关于Java 使用 Final 安全发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19764458/

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