单例模式在开发设计的过程中,很多地方经常可以用到,在单个对象可以完成任务的情况下它可以避免程序创建过多的对象浪费系统资源,同时对于创建一些较为麻烦的对象时,对于创建与销毁的过程也起到一定的优化作用。
【单例模式】
单例模式根据创建时机分为懒汉式与饿汉式两种模式,饿汉即急切需要创建,会在类被加载的过程创建对象,是跟随类的加载而创建。懒汉只有在需要使用时才会创建。本文主要讲解懒汉模式的DCL单例模式,代码如下:
public class Singleton {
/** 单例对象需要加 volatile 修饰 **/
private static volatile Singleton INSTANCE;
/** 保持构造方法私有化,防止外部实例化对象 **/
private Singleton() {}
public static Singleton getInstance() {
/** 第一个判空,防止对象已经实例化后,每次线程获取时都要去获取锁 **/
if (INSTANCE == null) {
synchronized (Singleton.class) {
/** 第二个判空,防止多个线程同时执行完第一个判空,在这里实例化多次对象 **/
if (INSTANCE == null) {
INSTANCE = new Singleton();
}
}
}
return INSTANCE;
}
}