关于java:单例模式

37次阅读

共计 1357 个字符,预计需要花费 4 分钟才能阅读完成。

一、概述

单例模式的定义就是确保某一个类只有一个实例,并且提供一个全局拜访点
单例模式具备典型的三个特点:

  • 只有一个实例。
  • 自我实例化。
  • 提供全局拜访点。

常见的单例模式实现形式有五种:饿汉式、懒汉式、双重检测锁式、动态外部类式和枚举单例。而在这五种形式中饿汉式和懒汉式又最为常见,上面就对饿汉式和懒汉式进行详细分析。

二、代码分析

1. 懒汉式

public class Singleton {
    //2. 本类外部创建对象实例
    private static Singleton instance = null;
    // 1. 构造方法私有化,内部不能 new
    private Singleton() {}
   //3. 提供一个私有的静态方法,返回实例对象
    public static Singleton getInstance() {if (instance == null) {instance = new Singleton();
        }
        return instance;
    }
 
}

单例模式的懒汉式体现了缓存的思维,延时加载就是一开始不要加载资源或者数据,始终 等,等到马上就要应用这个资源的或者数据了,躲不过来了才去加载。
懒汉式是定性的工夫换空间,不加同步的懒汉式是线程不平安的,如何实现线程平安的懒汉式(双重查看加锁):

public class Singleton {
    private volatile static Singleton instance = null; 
    // 私有化构造方法
    private Singleton() {}
    public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();
                }
            }
        }
        return instance;
    } 
}

总而言之,因为该模式是在运行时加载对象的,所以加载类比拟快,然而对象的获取速度绝对较慢,且线程不平安,如果想要线程平安的话能够加上 synchronized 关键字,然而这样会付出惨重的效率代价。
2. 饿汉式

public class Singleton {private static Singleton instance = new Singleton();
    // 私有化构造方法
    private Singleton() {}
    public static Singleton getInstance() {return instance;}
}

饿汉式是典型的空间换工夫,当类装载的时候就会创立类实例,不论你用不必,先创立进去,而后每次调用的时候,就不须要判断了,节俭了运行工夫。

三、应用场景

1、工作管理器就是很典型的单例模式,比方不能关上两个 windows task manager。
2、(回收站)也是典型的单例利用。在整个零碎运行过程中,回收站始终保护着仅有的一个实例。
3、网站的计数器,个别也是采纳单例模式实现,否则难以同步。
4、数据库连接池的设计个别也是采纳单例模式,因为数据库连贯是一种数据库资源。数据库软件系统中应用数据库连接池,次要是节俭关上或者敞开数据库连贯所引起的效率损耗,这种效率上的损耗还是十分低廉的,因为何用单例模式来保护,就能够大大降低这种损耗。
5、多线程的线程池的设计个别也是采纳单例模式,这是因为线程池要不便对池中的线程进行管制。

正文完
 0