java设计模式的原理_java设计模式singleton原理及实现

packagess;/*** 双重锁模式

* 起源:

* 为了应对线程安全Singleton03中的情况,双重锁应运而生。目的是为了避免对除了第一次调用外的所有调用都实行同步的昂贵代价。

* 同步的代价在不同的jvm间是不同的。在早期、代价相当高。随着更高级的jvm出现,同步的代价降低了,但synchronized方法或块依然有性能损失。

* 不考虑jvm的进步,程序员们绝对不想不必要的浪费处理时间。

* 优点:

* Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。

* 而volatile使用时有明确的规定:

* 对变量的写操作不依赖于当前值;

* 该变量没有包含在具有其他变量的不变式中;

* 只有在状态真正独立于程序内其他内容时才能使用 volatile。

* java内存的无序写入将会导致,双重锁定失败的问题。

*

* 如何解决可参照博客:

*http://blog.csdn.net/chenchaofuck1/article/details/51702129**/

public classSingleton04 {//私有的构造函数

privateSingleton04(){}//内部访问的实例

private static volatile Singleton04 instance = null;//外部访问的静态类

public staticSingleton04 getInstance(){if(null ==instance){synchronized(Singleton04.class){if(null ==instance){

instance= newSingleton04();

}

}

}returninstance;

}/*// 下面代码会出现这样的情况,

// 当instance为null的时候,两个线程并发进入if语句内部。然后,一个线程进入synchronized块来初始化instance,

// 而另一个线程则被阻断。当一个线程退出synchronized块时,等待着的线程进入并创建另一个singleton对象

// 基于此种情况,出现了“双重检查锁定”

public static Singleton04 getInstance(){

if(null == instance){

synchronized(Singleton04.class){

instance = new Singleton04();

}

}

return instance;

}*/}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值