单例模式的特点:
1.单例模式的类只能有一个对象存在
2.单例模式的类只能由自己来创建唯一的对象
3.单例模式必须要给外部类获取这个对象提供方法
4.单例模式是线程不安全的
懒汉式
需要的时候才初始化对象,在获取Instance对象时判断对象是否已经创建,如果未创建,才进行创建对象,如果对象已经创建,则直接返回。
存在线程安全问题。

public class SingletonTest{
       private SingletonTest instance;
     
       private SingletonTest(){
       }
  
       public static SingletonTest getInstance(){
              if(instance == null){
                 instance = new SingletonTest();
              }
              return instance;
       }
}

懒汉式+线程安全

public Class SingletonTest{
       private SingletonTest instance;
       
       private SingletonTest(){
       }
 
       public static synchronized SingletonTest getIntance(){
              if(intance == null){
                intance = new SingletonTest();
              }
              return instance;
       }
}
public class SingletonTest{
       private static SingletonTest instance;

       private SingletonTest(){
       }
 
       public static SingletonTest getInstance(){
              if(instance == null){
                 synchronized(SingletonTest.class){
                       if(instance == null){
                          instance = new SingletonTest();
                       }
                  }
               }
               return instance;
       }
}

饿汉式
在类加载时就创建单例对象。静态变量的赋值操作是类加载过程的最后一步初始化过程中执行的,也就是在<init>方法中。饿汉模式避免了多线程的并发问题,但是也导致了内存的浪费。

public class SingletonTest{
       private static SingletonTest instance = new SingletonTest();

       private SinglettonTest(){
       }

       public static SingletonTest getInstance(){
              if(instance == null){
                instance = new SingletonTest();
               }
               return instance;
        }
}
最后修改:2021 年 07 月 17 日
如果觉得我的文章对你有用,请随意赞赏