单例模式

单例模式:单例模式是确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式可以保证内存中只有一个单例,减少了内存的开销,还可以避免对资源的多重利用。
饿汉式与懒汉式:
饿汉式是类一加载出来进内存就创建好了对象。
懒汉式则是类才加载进内存的时候,对象还没有存在,只有调用了 getInstance() 方法时,对象才开始创建。 懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题, 解决线程安全问题,可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就变慢了,所以可以加双重判断来提高程序效率。
:开发常用饿汉式,因为饿汉式简单安全。懒汉式多线程的时候容易发生问题
饿汉式单例:
① 优点:没有任何锁,执行效率比较高,用户体验比懒汉式单例更好。
② 缺点:类加载的时候就初始化,不管用与不用都占用内存空间,浪费了内存。

饿汉式
public class Singleton{
     private Singleton(){}
     private static Singleton singleton = new Singleton();
     public static Singleton getInstance(){
        return singleton;
     }
}
懒汉式
public class Singleton{
     private Singleton(){}
     private static Singleton singleton;
     public static synchronized Singleton getInstance(){
         if(singleton==null){
             synchronized(Singleton.class)
             if(singleton==null){
                singleton = new Singleton();
             }
         }
         return singleton;
     } 
}

Singleton.getInstance();
存在线程安全问题:为了保证懒汉式单例的线程安全问题,要在方法前加synchronized

你可能感兴趣的