单例模式有懒汉式和饿汉式 先来懒汉式
public class Singleton { private static Singleton singleton; private Singleton(){} public static Singleton getInstance(){ if(singleton==null){ singleton = new Singleton(); } return singleton; } }以上实现单例模式不是线程安全的
if(singleton==null){ synchronized (Singleton.class) { if(singleton == null){ singleton = new Singleton(); } } }这种方式交double-check检查两次,保证并发安全以及性能。
饿汉式
private static Singleton singleton = new Singleton(); public Singleton(){} public static Singleton getInstance(){ return singleton; }由于静态成员是随类加载而加载的,并且在内存中只有一份。