欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 单例模式【懒汉与饿汉】

程序员文章站 2022-07-14 09:39:38
...

最近在看点算法的东西,有点收获就记录一下。


单例模式的概念学过面向对象的应该都清楚,这里就不赘述了。需要记录一下的是单例模式的两种写法:懒汉模式饿汉模式
这两者的概念看名字其实有点难理解,但是仔细想想很贴切,我用自己的语言通俗一点解释一下,可能并不能严谨的定义,但是有助于理解——

懒汉模式:即什么时候需要用到这个类的对象,就什么时候去实例化,不用到就永远都不实例化。

饿汉模式:即一开始实例化好,用不用再说,反正先准备好。

看代码来对比区别:

/**
* 懒汉写法(最常见。获取实例相对慢,但是加载类相对快)
*/
public class Singleton {  
    private static Singleton instance;  
     private Singleton (){}   
     public static Singleton getInstance() {  
     if (instance == null) {  
         instance = new Singleton();  
     }  
     return instance;  
     }  
}


/**
* 饿汉写法(比较少见。获取实例相对快,但是加载类相对慢)
*/  
 public class Singleton {  
     private static Singleton instance = new Singleton();  
     private Singleton (){}
     public static Singleton getInstance() {  
    return instance;  
    }  
 }  

上述懒汉模式的写法存在线程不安全的问题,即当多个线程调用这个单例的时候,可能会出现重复创建实例的现象,可以通过以下方式来解决:

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

多数情况下,不需要这样进行同步处理,因为这样做代码的效率会变低,不需要特殊考虑多线程的情况则不要这样去做。

以上是一点学习心得,感谢阅读!