懒汉单例模式
//懒汉模式实现单例
public class SingleTon_Lazy {
//单例延迟实例化
private SingleTon_Lazy singleTon_lazy;
//无参构造函数私有化,禁止使用new进行实例化
private SingleTon_Lazy(){}
//静态方法公有化,获取单例
public SingleTon_Lazy getSingleTon_lazy(){
if(singleTon_lazy == null)//1
singleTon_lazy = new SingleTon_Lazy();//2
return singleTon_lazy;
}
}
懒汉单例模式(线程安全版)
//懒汉模式实现单例
public class SingleTon_Lazy {
//单例延迟实例化
private SingleTon_Lazy singleTon_lazy;
//无参构造函数私有化,禁止使用new进行实例化
private SingleTon_Lazy(){}
//静态方法公有化,获取单例,synchronized加锁同步
public synchronized SingleTon_Lazy getSingleTon_lazy(){
if(singleTon_lazy == null)//1
singleTon_lazy = new SingleTon_Lazy();//2
return singleTon_lazy;
}
}
双重检查锁定(DCL)单例模式(非线程安全版)
//线程不安全的DCL单例模式
public class SingleTon_DCL {
//单例延迟初始化
private SingleTon_DCL singleTon_dcl;
//构造函数私有化,禁止程序通过new创建实例
private SingleTon_DCL(){}
//静态方法公有化,用于获取单例
public SingleTon_DCL getSingleTon_dcl(){
//第一次判断单例是否实例化
if(singleTon_dcl == null){
//加锁
synchronized(SingleTon_DCL.class){
//第二次判断
if(singleTon_dcl == null){
singleTon_dcl = new SingleTon_DCL();//a
}
}
}
return singleTon_dcl;
}
}
双重检查锁定(DCL)单例模式(线程安全版)
//线程安全的DCL单例模式(基于volatile解决方案)
public class SingleTon_DCL {
//单例延迟初始化,volatile关键字修饰保证多线程可见性,以及禁止实例化过程重排序
private volatile SingleTon_DCL singleTon_dcl;
//构造函数私有化,禁止程序通过new创建实例
private SingleTon_DCL(){}
//静态方法公有化,用于获取单例
public SingleTon_DCL getSingleTon_dcl(){
//第一次判断单例是否实例化
if(singleTon_dcl == null){
//加锁
synchronized(SingleTon_DCL.class){
//第二次判断
if(singleTon_dcl == null){
singleTon_dcl = new SingleTon_DCL();//a
}
}
}
return singleTon_dcl;
}
}
饿汉模式(线程安全版)
//饿汉单例模式
public class SingleTon_Hungry {
//类初始化时,开始单例实例化
private SingleTon_Hungry singleTon_hungry = new SingleTon_Hungry();
//无参构造函数私有化,避免程序中通过new实例化对象
private SingleTon_Hungry(){}
//静态方法公有化,用于获取单例
public SingleTon_Hungry getSingleTon_hungry(){
return singleTon_hungry;
}
}