gpt4 book ai didi

java - 防御性副本能否支持线程安全?

转载 作者:行者123 更新时间:2023-12-01 18:36:19 25 4
gpt4 key购买 nike

在此示例中是否需要制作 fileName 参数的防御性副本?

public static Context getInstanceFromFile(final String fileName) 
throws IOException, FileNotFoundException, ContextException {
if (fileName == null) {
throw new NullPointerException("The fileName argument is null.");
}
return instance.loadParametersFromFile(String.valueOf(fileName));
}

理论上,另一个线程可以在调用 loadParametersFromFile 方法之前修改 fileName。在调用 String.valueOf(fileName) 之前不也是这样吗?

如何确保调用 loadParametersFromFile 时传入 fileName 的值仍然相同?

最佳答案

在 Java 中,字符串是不可变的,另一个线程无法修改 fileName 引用的值(因为它对于调用方法来说是本地的),因此防御性副本在这里绝对没有任何好处.

一般来说,防御性副本可以帮助避免这种情况,只要在正确的时间完成(当副本运行时没有其他线程可以修改实例时)。正如这个 String 示例所示,更好的防御思路是使传递的类不可变。

关于java - 防御性副本能否支持线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21849703/

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