四种单例模式:
1:饿汉式(在程序启动或单件模式类被加载的时候,单件模式实例就已经被创建。)
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance() {
return instance;
}
}
2:懒汉式(当程序第一次访问单件模式实例时才进行创建。)
/**
* 懒汉式
*/
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
3:Double Check Lock(DCL)实现单例模式
/**
* Double Check Lock(DCL) 双重锁校验
* 优点:资源利用率高,但是由于Java内存模型的问题偶尔会出现DCL失效问题
*/
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
//避免不必要的同步
if (instance == null) {
synchronized (Singleton.class) {
//在null的情况下创建实例
if (instance == null) {
/**
* 1.给Singleton的实例分配内存
* 2.调用Singleton()的构造函数
* 3.将instance对象指向分配的空间
*
* 因为JVM编译器对象允许处理器乱序执行,所以这三步顺序不一定
*/
instance = new Singleton();
}
}
}
return instance;
}
}
4:静态内部类单例模式
/**
* 静态内部类单例模式(推荐使用)
* 能够保证线程安全,对象的唯一性,延迟了单例的实例化。
*/
public class Singleton {
private Singleton(){}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
/**
* 静态内部类
*/
private static class SingletonHolder{
private static final Singleton instance = new Singleton();
}
单例模式
最新推荐文章于 2024-07-25 13:59:31 发布