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

来源:互联网 发布:找男妓的体验知乎 编辑:程序博客网 时间:2024/06/06 02:30

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


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

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

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

看代码来对比区别:

/*** 懒汉写法(最常见。获取实例相对慢,但是加载类相对快)*/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;       }   }  

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

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

原创粉丝点击