定义 :一个类有且仅有一个实例,且这个实例为系统自行创建,类对外提供一个访问该单例的全局访问点。
懒汉单例模式:
类加载时没有生成单例,只有当第一次调用 getlnstance 方法时才去创建这个单例。volatile和synchronized保证线程安全。
public class LazySingleton {
private static volatile LazySingleton instance=null;//volatile保证所有线程中同步
private LazySingleton() {}//privete避免类在外部被实例化
public static synchronized LazySingleton getInstance() {
if(instance==null)//如果没有单例,则new创建新单例
instance=new LazySingleton();
return instance;
}
}
饿汉单例模式:
类一旦加载就创建一个单例,保证在调用 getInstance 方法之前单例已经存在,所以在定义单例时就new一下。
public class HungrySingleton {
private static final HungrySingleton instance=new HungrySingleton();
private HungrySingleton(){}
public static HungrySingleton getInstance() {
return instance;
}
}