1. java单例模式总结

1. 使用场景

确保一个类最多只有一个实例,并且提供一个全局访问点。用于多实例造成冲突的情况,例如线程池、缓存、硬件设备。

2. 代码示例

2.1 生成实例时添加synchronized同步锁

//单例模式,问题点:如果经常调用,比较消耗资源。
public class Singleton(){
public static Singleton uniqueInstance = null;

private Singleton(){

}
//比较粗暴,偶尔可以使用
public static synchronized Singleton getInstance(){
    if(uniqueInstance == null){
        uniqueInstance = new Singleton();
        }
        return uniqueInstance;
}
}

2.2 急切 创建实例

//提前生成对象且一直保存,根据情况使用,比较简单
public class Singleton(){
public static Singleton uniqueInstance = new Singleton();

private Singleton(){

}

public static synchronized Singleton getInstance(){
    if(uniqueInstance == null){
        //uniqueInstance = new Singleton();
        }
        return uniqueInstance;
}

2.3 双重检查加锁法

public class Singleton(){
//volatile不要忘记,防止编译器对代码进行优化,
//优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
public volatile static Singleton uniqueInstance = null;

private Singleton(){

}

public static Singleton getInstance(){
    if(uniqueInstance == null){
    //解决多线程问题,同步锁只执行一次,此例最好。
            synchronized(Singleton.class) if(uniqueInstance == null){
                uniqueInstance = new Singleton();
                }
      }
        return uniqueInstance;
}






你可能感兴趣的:(1. java单例模式总结)