java单例模式的四种不同设计

本文分析了Java中四种单例模式实现的线程安全性及性能影响,指出设计1(双重检查锁)避免了阻塞,设计2(同步静态方法)性能差,设计3存在安全隐患,设计4(懒汉式)内存消耗大。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面的Java代码给出了单例模式的四种不同设计,在多线程的实际环境测试下会表现出不同的效果,请对这几种设计完成分析评价

//设计1

class STon

{

        private static instance =null;

         public static STon getInstance()

        {

            if (instance == null)

             synchronized(singleton.class)

                { if (instance == null )

                  {

                       instance == new STon;

                   }

                }

         return instance;

        }

}

//设计2

class STon

{

      private static instance =null;

      public synchronized static STon getInstance()

       { 

           if (instance == null )

                  instance == new STon;

           return instance;

       }

}

//设计3

class STon

{

        private static instance =null;

        public static STon getInstance()

        {  

             if (instance == null )

                 instance == new STon;

            return instance;

        }

}

//设计4

class STon

{

        private static instance = new STon;

        public static STon getInstance()

        {  

              return instance;

        }

}

设计1、2、4均可,设计3有线程安全问题,多线程并发时可能会出问题;

设计1双重检查,第一个判断instance是否为null避免了已有对象时的排队阻塞;

设计2全局锁直接让每次访问都互斥,性能不佳;

设计3存在线程安全问题,判断null和创建之间可能被打断(如中断、异常等等);

设计4贪心法,对象唯一创建后常驻内存,对内存消耗较大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Valueyou24

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值