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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 安路凤 中级黑马   /  2012-5-12 22:24  /  1422 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁能给我说说 单例模式中懒汉式、饿汉式有什么区别??

6 个回复

倒序浏览
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}

      //注意这是private 只供内部调用
  private static Singleton instance = new Singleton();
      //这里提供了一个供外部访问本class的静态方法,可以直接访问  
  public static Singleton getInstance() {
        return instance;   
      }
    }  
第二种形式:
public class Singleton {
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次    
  //使用时生成实例,提高了效率!
  if (instance==null)
    instance=new Singleton();
return instance;   }
}

第二种虽然效率好但有安全问题,最好用第二种!!

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
两种举例:
饿汉式:
class Single
{
        private Single(){}
        private static Single s = new Single();
        public static Single getInstance()
        {
                return s;
        }
}
懒汉式:
class Single
{
        private Single(){}
        private static Single s = null;
        public static Single getInstance()
        {
                if(s==null)
                        s = new Single();l
                return s;
        }
}
通过上面两个程序可以看出两者不同点有:
第一,对对象的初始化时间不同。
第二,在多线程时,懒汉式需要同步并双重判断来解决不安全性。
第三,在实际开发中一般用的是饿汉式的单例模式,从效率和安全方面都比懒汉式好。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
懒汉式:对象是被方法调用时才初始化,对象延时加载。多线程中存在安全隐患。
而饿汉式对象随着类的加载就加载了,多线程中不存在安全隐患
回复 使用道具 举报
凤姐  那么久了你还在纠结这两个汉子。。。。
回复 使用道具 举报
咦??我都不记得我什么时候问了个这么那啥的问题了~~~~~~~~~~~~~~~~~~~
回复 使用道具 举报
安路凤 发表于 2012-5-14 18:01
咦??我都不记得我什么时候问了个这么那啥的问题了~~~~~~~~~~~~~~~~~~~

记得你不是还说毕老师讲错了么.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马