gpt4 book ai didi

java - 关于实例变量初始化的线程安全

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

我看到了很多初始化实例变量的习语

public class Test{
private Long l = 1l;
private MyClass mc = new MyClass();

public Test(){}
...
}

但我更愿意

public class Test{
private Long l;
private MyClass mc;

public Test(){
l = 1l;
mc = new MyClass();
}
...
}

考虑到这些是非最终变量,这两种方法在线程安全方面是等效的还是一种比另一种“更”正确?

最佳答案

线程安全不是问题,因为这发生在构造阶段,并且两个线程不能构造同一个对象。好吧,如果您让 this 从构造函数中逃逸,另一个线程可能会在构造期间访问该对象,但您确实不应该这样做。在功能方面,这两个选项是相同的,因此即使存在线程安全问题,它们也会以相同的方式影响两者。

如果你需要做一些不能在初始化器中完成的计算,第一个选项,即在声明时初始化字段,并不总是可行的(即便如此,如果你这样做,你可以将初始化保留在构造函数之外不过在初始化程序 block 中)。但是,如果任何一种方式都可行,那么这纯粹是一个风格问题,而且我认为 Java 程序员之间没有明确的偏好,所以选择对您来说更好的方式。

关于java - 关于实例变量初始化的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1568722/

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