A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 pp7803515 于 2015-7-2 19:04 编辑
  1. class Single {
  2.         private static Single s = null;

  3.         private Single() {
  4.         }

  5.         public static Single getInstance() {
  6.                 if (s == null) {
  7.                         synchronized (Single.class) {
  8.                                 if (s == null) {
  9.                                         s = new Single();
  10.                                 }
  11.                         }
  12.                 }
  13.                 return s;
  14.         }
  15. }
复制代码
这是一个常见的DCL单例模式。我想问下,在private static Single s = null;这句代码改为private static volatile Single s = null;是如何避免了DCL失效的呢?
还有一个小问题。单例模式中创建对象的方法也是静态的啊。这样单例模式和普通的静态方法到底有什么区别呢?

4 个回复

倒序浏览
有没有大神解答一下?
回复 使用道具 举报
自己顶一下,有没有大神解答一下
回复 使用道具 举报
问下什么是DCL单例模式???
回复 使用道具 举报
慕容旺财 发表于 2015-7-3 18:21
问下什么是DCL单例模式???

在单例模式下,就是在多线程的时候,为了提高锁的效率,用双检锁(DoubleCheckedLock)。然后我百度的时候,发现有人说要加多一个volatile 来避免DoubleCheckedLock失效。我就想知道这个具体的原理是什么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马