关于synchronized同步的使用

rumlee rumlee 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
几乎各种牛人的文章都说到单例模式的双重检查有问题,类似下面的代码

public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null)
instance = new Singleton();
}
}

return instance;
}

并且说到有问题的原因是可能另外的线程检测到instance不为空,但是对象还没有初始化好。
但是我疑虑的是,如果这种写法有问题的话,那也就意味着在synchronized中只要new了对象都有可能有问题。
例如下面的写法

public static synchronized Object newobj(){
return new Object();
}



或者是这样的

public static synchronized void addobj(ArrayList list){
list.add(new Object());
}


那如果这些代码都有问题的话,那就无数的代码都有问题,只要是涉及到需要在多线程中创建对象的都可能有这种问题。
虽然各种大牛都说第一段代码里的这种问题,可以依靠volatile来解决。但是后面两种呢,这没法用volatile解决的啊。
感谢赐教
...全文

相关推荐

评论 17
收藏 已收藏
分享
返回顶部
rumlee
Java SE 62,620 成员 307,251 内容