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

java单例模式_Java基础 | 设计模式 | 单例模式的几种实现

程序员文章站 2022-03-01 13:03:47
...

java单例模式_Java基础 | 设计模式 | 单例模式的几种实现

单例模式是一种常见的设计模式,即在整个系统中只拥有一个全局对象,这个对象的类只有一个实例存在,如垃圾箱、打印机的打印对象。


1. 懒汉式

public 
  • 单例模式的构造方法都为私有private,这能保证单例类不能通过new实例化,只能通过类中的static方法获取实例。
  • 上面的懒汉式是线程不安全的,当两个线程同时调用getInstance()方法时,此时instance都为null,因此会创建两个实例。可以通过添加synchronized关键字解决。
public 

2. 饿汉式

public 
  • 饿汉式是提前实例化的,因此是线程安全的。
  • 不论使不使用,这个实例都存在内存中,可以使用内部类来进行延迟加载。
public 

3. 双检锁

public 
  • 双检锁首先判断实例single存不存在,如果存在就直接返回实例,不存在再通过加锁去创建实例,这比懒汉式在方法上加锁效率更高。

4. 比较

  • 时间/空间:懒汉式每次都要判断null相较来说更花时间,加锁synchronized也是,饿汉式在静态代码块实例化类,不论使不使用都会事先实例化,相较来说更花空间。
  • 线程安全:懒汉式不是线程安全的,需加synchronized才是线程安全的,其他方法则都是线程安全的。

5. 参考

  • 单例模式的几种写法(包含双检锁写法)
  • 单例模式(详解,面试问题)
  • 单例模式学习总结
相关标签: java单例模式