1. DCL 的目的
Double Check Lock 是多线程环境下为提高延迟初始化效率而被广泛使用的一种方式。我们常常会使用延迟初始化,以降低服务启动时间。
/**
* code 1.1
*/
@NotThreadSafe
public class Client {
private LazyInitClass instance ;
public LazyInitClass getInstance() {
if(instance == null)
instance = new LazyInitClass("LazyInitClassFieldName") ;
return instance ;
}
}
上面的代码是典型的延迟初始化的例子。当上面的例子暴露在多线程环境下时,便会出现各种问题。最明显的错误:方法会返回多个 LazyInitClass 对象。
/**
* code 1.2
*/
@NotThreadSafe
public class Client {
private LazyInitClass instance ;
public synchronized LazyInitClass getInstance() {
if(instance == null)
instance = new LazyInitClass("LazyInitClassFieldName") ;
return instance ;
}
}
<

本文探讨了DCL(Double Check Lock)在Java多线程环境中的目的,存在的问题及其解决方案,包括JDK1.3以后的volatile使用,以及DCL的替代方案——延迟初始化占位类模式。DCL由于历史问题已被弃用,现代并发优化更倾向于使用更易理解和高效的策略。
最低0.47元/天 解锁文章
2088

被折叠的 条评论
为什么被折叠?



