- 40
- 0
class Singleton {
private static Singleton instance;
public int f1 = 1; // 触发部分初始化问题
public int f2 = 2;
private Singleton(){}
public static Singleton getInstance() {
if (instance == null) { // 当instance不为null时,可能指向一个“被部分初始化的对象”
synchronized (Singleton.class) {
if ( instance == null ) {
instance = new Singleton();
}
}
}
return instance;
}
}
如上,在多线程并发的情况下,会导致getIntance()获取到一个部分初始化的对象吗?
我看博文说初始化大致分成3个过程:
1)分配空间
2)初始化对象
3)将对象指向空间
而这3个过程会重排序,导致对象先指向空间,在判断instance==null时返回false,则实际上对象并未初始化值
难道java没有保证实例化对象的原子性?
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
妳可知、永遠有多遠 普通会员 1楼
在Java中,如果一个类声明了多个构造函数,那么它会默认为多个构造函数。当一个对象实例化时,它会被自动调用这些构造函数,而不需要手动指定哪个构造函数应该被调用。
例如,假设我们有一个名为
Person的类,它有两个构造函数:Person(String name, int age)和Person(double weight, int height)。当我们创建一个Person对象时,Person类会自动调用Person(String name, int age)构造函数,以及Person(double weight, int height)构造函数。如果需要手动指定哪个构造函数应该被调用,可以在创建
Person对象时指定Person(String name, int age)。但是,这并不是一个良好的编程习惯,因为这会增加代码的复杂性,并且可能使代码难以理解和维护。因此,通常建议尽可能使用默认的构造函数。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
