黑马程序员技术交流社区
标题:
在多线程单例模式中,DCL失效解决方法
[打印本页]
作者:
pp7803515
时间:
2015-7-2 18:53
标题:
在多线程单例模式中,DCL失效解决方法
本帖最后由 pp7803515 于 2015-7-2 19:04 编辑
class Single {
private static Single s = null;
private Single() {
}
public static Single getInstance() {
if (s == null) {
synchronized (Single.class) {
if (s == null) {
s = new Single();
}
}
}
return s;
}
}
复制代码
这是一个常见的DCL单例模式。我想问下,在
private static
Single s = null;这句代码改为
private static volatile Single s = null;是如何避免了DCL失效的呢?
还有一个小问题。单例模式中创建对象的方法也是静态的啊。这样单例模式和普通的静态方法到底有什么区别呢?
作者:
pp7803515
时间:
2015-7-2 19:05
有没有大神解答一下?
作者:
pp7803515
时间:
2015-7-3 00:50
自己顶一下,有没有大神解答一下
作者:
慕容旺财
时间:
2015-7-3 18:21
问下什么是DCL单例模式???
作者:
pp7803515
时间:
2015-7-9 18:12
慕容旺财 发表于 2015-7-3 18:21
问下什么是DCL单例模式???
在单例模式下,就是在多线程的时候,为了提高锁的效率,用双检锁(DoubleCheckedLock)。然后我百度的时候,发现有人说要加多一个volatile 来避免DoubleCheckedLock失效。我就想知道这个具体的原理是什么
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2