黑马程序员技术交流社区

标题: 【哈尔滨校区】单例设计模式 [打印本页]

作者: 张斯佳    时间: 2018-3-21 15:22
标题: 【哈尔滨校区】单例设计模式
多线程的单例设计模式:保证某个类中内存中只有一个对象
(1)饿汉式:
class Single {
      private Single(){}//将构造函数私有化,不让别的类建立该类对象
      private static final Single s=new Single();//自己建立一个对象
      public static Single getInstance(){//提供一个公共访问方式
              return s;
      }
}
(2)懒汉式:
class Single{
      private Single(){}
      private static Single s;
      public static Single getInstance(){
             if(s==null)
             s=new Single();
             return s;
      }
}
饿汉式和懒汉式的区别:
**
饿汉式是类一加载进内存就创建好了对象;
懒汉式则是类加载进内存的时候,对象还没有存在,只有调用了getInstance()方法时,对象才开始创建。
**
懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题,解决线程安全问题
可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就变慢了,
所以可以加双重判断来提高程序效率。
如将上述懒汉式的Instance函数改成同步:
public static Single getInstance(){
        if(s==null){
             synchronized(Single.class){
                   if(s==null)
                   s=new Single();
             }
         }
         return s;
}



作者: hmhm123    时间: 2018-3-21 15:33
单例模式进阶:
[Java] 纯文本查看 复制代码
public class Singleton {
    private Singleton(){}
    //volatile避免jvm和cpu指令重排
    private volatile static Singleton instance =null;
    public static Singleton getSingleton(){
        //双重检测机制
        if(instance==null){
            synchronized (Singleton.class) {
                if(instance==null){
                    instance=new Singleton();
                }
            }
        }
        return instance ;
    }
}

作者: xutian4500    时间: 2018-3-28 17:19
写的很好!不错不错!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2