定义:保证一个类仅有一个实例,并提供一个全局的访问点。
饿汉式:
public class Singleton01 {
private static Singleton01 instance = new Singleton01();
public static Singleton01 getInstance(){
return instance;
}
}
类加载就完成初始化,所以类加载速度慢,但是获取对象的速度快。
懒汉式:
public class Singleton02 {
private static Singleton02 instance;
public static Singleton02 getInstance(){
//先检查实例是否存在,如果不存在才进入下面的同步块
if(instance==null){
//同步块,线程安全的创建实例
synchronized (Singleton02.class)
{
//再次检查实例是否存在,如果不存在才真正的创建实例
if (instance == null)
{
instance = new Singleton02();
}
}
}
return instance;
}
}
静态内部类式:
public class Singleton03 {
private static final class InstanceHolder
{
private static Singleton03 instance = new Singleton03();
}
public static Singleton03 getInstance()
{
return InstanceHolder.instance;
}
}
加载一个类的时候其静态内部类(包括内部类)不会被加载。因为一个类被加载,当且仅当某个静态成员(静态域、构造器、静态方法等)被调用时发生。