weixin_42506330
weixin_42506330
采纳率0%
2018-11-22 17:52 浏览 1.2k

单例的懒汉模式为何不安全?

懒汉模式下,多线程访问时,会创建多个实例,为什么出现创建多个实例的情况就不安全了?能否举实例说明?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-11-22 18:18

    不是“出现创建多个实例的情况就不安全了”,而是既然是单例模式,就不应该出现多个实例,否则还要单例干什么,任何可能违背设计者意图的方式,都是“不安全”的。

    好比,氧气罩不能提供氧气是不安全的,当然对于一个不需要氧气罩的正常人来说,氧气罩不能提供氧气只是故障,而不会造成什么安全问题。只是是因为氧气罩设计作为生命支持系统的一部分,是给不能呼吸的患者使用,而它不能提供氧气,这是不安全的。

    点赞 2 评论 复制链接分享
  • qq_32409957 可爱的小书包 2018-11-23 03:52
     public class LazySingleton {
        private LazySingleton(){}
        private static LazySingleton singleton;
        public static LazySingleton getInstance() {
            if (singleton == null)
                singleton =  new LazySingleton();
            return singleton;
        }
    }
    

    1.设想一下,如果第一个线程进入getInstance,此时对于他来说singleton是null,但是此时cpu调度时间到了,该到了第二个线程进来
    2.第二个线程进来,此时singleton也是空的,因此就生成了一个
    3.时间到了,线程1此时恢复了,对于他来讲,singleton也是空的,所以也创建了一个

    点赞 评论 复制链接分享

相关推荐