java中单例模式_Java中单例模式的几种实现

饿汉式单例

public class Single{

private static Single mInstance = new Single();

private Single(){}

public static Single getInstance(){

return mInstance;

}

}

优点是线程安全,缺点时没有办法实现懒加载。

懒汉式+同步方法单例

public class Single{

private static Signle mInstance;

private Single(){}

public static synchronized Single getInstance(){

if(mInstance == null){

mInstance = new Single();

}

return mInstance;

}

}

优点是线程安全,懒加载

缺点是效率不高

volatile+Double Check方式

public class Single{

private volatile static Single mInstance;

private Single(){}

private static Single getInstance(){

if(mInstance == null){

synchronized(Single.class){

if(mInstance == null){

mInstance = new Single();

}

}

}

return mInstance;

}

}

优点是线程安全,效率还可以

Holder模式

public class Single{

private Single(){}

private static class Holder{

private static Single instance = new Single();

}

public static Single getInstance(){

return Holder.instance;

}

}

优点是线程安全,懒加载,效率高。

枚举方式

public enum Single{

//单例变量,也是枚举变量

INSTANCE;

public static getInstance(){

return INSTANCE;

}

}

优点,线程安全

缺点,没有懒加载

枚举+Holder

public class Single{

private Single(){}

//这个枚举类型的Holder主要是为了确保单例

private enum EnumHolder{

INSTANCE;

//单例的枚举型中包含一个Single类型的变量

private Single instance;

EnumHolder(){

//在构造函数中延时初始化

this.instance = new Single();

}

//提供方法返回单例

private Single getInstance(){

return instance;

}

}

//通过枚举类型返回单例实例

public static Single getInstance(){

return EnumHolder.INSTANCE.getInstance();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值