多线程的单例设计模式

多线程的单例设计模式

    保证某个类中内存中只有一个对象

         (1)设计模式:

                解决某类问题行之有效的方法,是一种思想,是规律的总结。     

         (2)用来保证某个类在内存中只有一个对象     

         (3)保证唯一性的思想及步骤

                 1、为了避免其他程序建立该类对象,先禁止其他程序建立该类对象,即将构造函数私有化。

                  2、为了其他程序访问到该类对象,须在本类中创建一个该类私有对象。

                  3、为了方便其他程序访问到该类对象,可对外提供一个公共访问方式。         

          (4)单例设计模式的两种方式

          A:饿汉式 当类加载的时候,就创建对象。    

class  Student

{

     private Student() {}   //将构造函数私有化,不让别的类建立该类对象

     private static final Student s = new Student();   //自己建立一个对象

     public static Student getInstance()     //提供一个公共访问方式

      {

            return s;

       }

}

          B:懒汉式 当使用的使用,才去创建对象。

class Student

{

      private Student() {}

      private static final Student s = null;

      public static Student getInstance()

       {

             if(s==null)

             {

                  s= new Student();

              }

              return s;

         }

}         

        (5)饿汉式和懒汉式的区别:

               1、饿汉式是类一加载进内存就创建好了对象;

               2、懒汉式则是类才加载进内存的时候,对象还没有存在,只有调用了getInstance()方法时,对象才开始创建。

               3、懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题,解决线程安全问题可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就变慢了,所以可以加双重判断来提高程序效率。

     如将上述懒汉式的Instance函数改成同步:

public static Single getInstance()

{

      if(s==null)

      {

            synchronized(Single.class)

            {

                  if(s==null)

                        s=new Single();

             }

        }

        return s;

}

注:开发常用饿汉式,因为饿汉式简单安全。懒汉式多线程的时候容易发生问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhisheng_blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值