设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、提高代码的可靠性。
单例模式属于创建型模式;
单例模式保证两点:
①只能他自己创建这个类的对象,
②只能创建一个对象;
保证第一点:
构造是私有的,只能由自己去创建本类对象;同时这个类提供了一种公共的访问其唯一的对象的方式,外界不需要去实例化该类的对象;
保证第二点:
单线程:类中的成员变量为static的,类加载时,静态变量是唯一的,所以保证只创建一个对象;
多线程:使用 synchronized
锁来保证;
饿汉式:类加载导致单例对象被创建;
实现步骤:
懒汉式:类加载不会导致该单例对象被创建,而是首次使用该对象时才会创建;
实现步骤:
要保证线程安全,就要保证创造对象的那个方法具有原子性;即同一时刻只能有一个线程去访问资源;
这里使用 Synchronized
同步锁;
由于懒汉模式中,getInstance方法大部分是读操作,读操作是线程安全的,所以没必要让每个线程都必须持有锁才能调用该方法,所以调整加锁的时机,由此产生了一种新的实现模式:双重检查锁模式;
注意:
这里要防止空指针异常,所以对实例变量使用 volatile
关键字修饰,保证可见性和禁止指令重排;