单例模式

这个类的对象在jvm中只有一个实例,并提供一个全局访问节点(线程池,缓存,硬件设备)
饿汉式:天生线程安全(不考虑反射),类加载初始化时就创建实例
懒汉式:在取用(getInstence())时创建实例,多线程下不安全,需要加锁

  • 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源
  • 在Spring中,每个bean默认就是单例的,这样做的优点是Spring容器可以管理

双重检验锁

  1. public class Singleton4 {
  2. // 私有构造
  3. private Singleton4() {}
  4. private static Singleton4 single = null;
  5. // 双重检查
  6. public static Singleton4 getInstance() {
  7. if (single == null) {
  8. synchronized (Singleton4.class) {
  9. if (single == null) {
  10. single = new Singleton4();
  11. }
  12. }
  13. }
  14. return single;
  15. }
  16. }

静态内部类和枚举类饿汉式

https://www.xeblog.cn/articles/16

应用场景

网站的计数器,一般也是采用单例模式实现,否则难以同步。
多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。