概述
通过双重检查锁(double-checked locking)(在并发场景下)实现延迟初始化的优化 问题隐患(可参考 The "Double-Checked Locking is Broken" Declaration),推荐解决方案中较为 简单一种(适用于 JDK5 及以上版本),将目标属性声明为 volatile 型(比如修改 helper 的属 性声明为`private volatile Helper helper = null;`)。
正例:
public class Singleton {
private static Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null){
synchronized(Singleton.class){
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
反例:
public class
LazyInitDemo
{
private
Helper helper
=
null
;
public
Helper
getHelper
() {
if
(
helper
==
null
) {
synchronized
(
this
) {
if
(
helper
==
null
) {
helper
=
new
Helper
(); }
}
}
return
helper
;
}
// other methods and fields...
}
最后
以上就是柔弱百褶裙为你收集整理的java的双重检查锁问题的全部内容,希望文章能够帮你解决java的双重检查锁问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复