这两个班是一样的吗?是否正在实例化非最终静态变量线程安全?
public class SingleTone {
// yes this is a bug what if i change the class this way
// private static SingleTone instance = new SingleTone();
// and empty constructor?
private static SingleTone instance;
private SingleTone() {
instance = new SingleTone();
}
public static SingleTone getInstance(){
return instance;
}
}
和
public class SingleTone {
private final static SingleTone instance = new SingleTone();
private SingleTone() {
}
public static SingleTone getInstance(){
return instance;
}
}
是在有最终没有任何变化线程安全问题,通过构造函数实例?
问题2:
什么
private final static SingleTone instance = new SingleTone();
private SingleTone() {
}
,这之间的差异:
private final static SingleTone instance;
private SingleTone() {
instance = new SingleTone();
}
为了澄清更多:如果我这样重写我的第一个例子私有静态SingleTone实例=新SingleTone();并删除构造函数实例!什么是使用最终的好处! (我正在寻求线程安全问题而不是性能) – 2013-03-18 12:17:08
您问题的原始版本的两个部分都包含错误。而你的“澄清”问题现在如此令人困惑/混乱,以至于无法回避......国际海事组织。 – 2013-03-18 12:18:01
可以回答的一点是:有或没有'最终'字段*有效最终*,因为它被保证只能分配一次。它是线程安全的,因为分配发生在类初始化时。 – 2013-03-18 12:19:55