模式定义:保证一个类只有一个实例,并且提供一个全局访问点;如:数据库连接池
/**
* 单例:懒加载模式:使用的时候才加载
*/
class LazySingleton {
// volatile:java中防止重排序声明关键字
private volatile static Singleton instance;
// 类构造器
public LazySingleton() {
}
public static Singleton getInstance() {
if (instance == null) {
// synchronized:防止多线程同步锁声明关键字
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
/**
* new对象时 字节码层面的顺序;变量用volatile声明后则可以防止重排序,这样处理在多线程不会出问题
* 1、分配空间
* 2、初始化
* 3、引用赋值
*/
}
}
}
return instance;
}
}
/**
* 单例:饿汉模式:初始化时加载
*/
class HungrySingleton{
private static HungrySingleton instance = new HungrySingleton();
private HungrySingleton(){
}
public static HungrySingleton getInstance() {
return instance;
}
}