黑马程序员技术交流社区

标题: 有关单例模式的问题 [打印本页]

作者: 安路凤    时间: 2012-5-12 22:24
标题: 有关单例模式的问题
谁能给我说说 单例模式中懒汉式、饿汉式有什么区别??
作者: 余耀明    时间: 2012-5-12 22:29
第一种形式: 定义一个类,它的构造函数为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;   }
}

第二种虽然效率好但有安全问题,最好用第二种!!
作者: 梁清平    时间: 2012-5-12 22:47
两种举例:
饿汉式:
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;
        }
}
通过上面两个程序可以看出两者不同点有:
第一,对对象的初始化时间不同。
第二,在多线程时,懒汉式需要同步并双重判断来解决不安全性。
第三,在实际开发中一般用的是饿汉式的单例模式,从效率和安全方面都比懒汉式好。
作者: 张成龙    时间: 2012-5-12 22:56
懒汉式:对象是被方法调用时才初始化,对象延时加载。多线程中存在安全隐患。
而饿汉式对象随着类的加载就加载了,多线程中不存在安全隐患
作者: 蒋映辉    时间: 2012-5-12 23:03
凤姐  那么久了你还在纠结这两个汉子。。。。
作者: 安路凤    时间: 2012-5-14 18:01
咦??我都不记得我什么时候问了个这么那啥的问题了~~~~~~~~~~~~~~~~~~~
作者: 蒋映辉    时间: 2012-5-14 18:17
安路凤 发表于 2012-5-14 18:01
咦??我都不记得我什么时候问了个这么那啥的问题了~~~~~~~~~~~~~~~~~~~

记得你不是还说毕老师讲错了么.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2