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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小洋人最happy 于 2012-11-19 23:03 编辑

class  SingleDemo2
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
  if(s==null)
   s = new Single();
  return s;
}
}


class Single
{
private single(){}
private static single s = new Single();
public static Single getInstance()
{
  return s;
}
}


评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
本帖最后由 金鑫 于 2012-11-19 22:19 编辑

第一个是懒汉式:
//在类刚加载进来时,对象的指向为空,没有创建任何对象,当调用getInstance()方法时会进行判断
private static Single s = null;
if(s==null)//如果对象为空
   s = new Single();//那么才开始创建对象
  return s;//然后将对象返回


第二个是饿汉式:
private static single s = new Single();//当类加载进来之后,就在第一时间创建了对象,并在getInstance()方法中将对象返回
public static Single getInstance()
{
  return s;
}


其中饿汉式比懒汉式的安全性高,因为在多线程中,懒汉式可能会出现不能保证对象唯一的情况。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我看到了饿。。。。该吃饭了
回复 使用道具 举报
本帖最后由 刘腾 于 2012-11-19 22:50 编辑

懒汉模式可以这样理解:该单例类非常懒,只有在自己需要对象的时候才会判断是否已有对象,如果没有就创建一个对象,然后返回,如果已有对象,立即返回。
饿汉式单例:该单例类非常饿,迫切需要吃东西,所以在类加载的时候立即创建对象。

我们对比一下这两种模式的优缺点:
懒汉模式:运行时获得对象的速度比较慢,但是类的加载比较快。他在整个的应用生命周期中,只有一部分时间在占用资源。
饿汉模式:运行时加载类的速度比较慢,但是获取对象的速度比较快。它从加载到应用结束一直在占用资源。

从用户体验的角度来说,我们应该首选饿汉模式。我们愿意等待某个程序花较长的时间初始化,却不喜欢在程序运行时等待太久,给人一种反应迟钝的感觉,所以对于有重量级对象参与的单例模式, 我们推荐使用饿汉模式 。
//懒汉式,当多个线程访问时,不安全,返回的不是同一个对象
class  SingleDemo2
{
private static SingleDemo2 s ;
private SingleDemo2(){}//看这里,lz你帖子的写法不对,构造函数与类名名称一致
public static SingleDemo2 getInstance()
{
  if(s==null)
   s = new SingleDemo2();
  return s;
}
}
//饿汉式,线程安全,但是效率比较低
class Single
{
private single(){}
private static single s = new Single();
public static Single getInstance()
{
  return s;
}
}
//虽然是安全的,但是效率非常低,一个时候只有一个线程访问,同时返回一个对象
class  SingleDemo3
{
private static SingleDemo3 s ;
private SingleDemo3(){}
public static synchronized SingleDemo3 getInstance()
{
  if(s==null)
   s = new Single();
  return s;
}
}
//效率高,多线程

class  SingleDemo4
{
private static SingleDemo4 s;
private SingleDemo4(){}
public static synchronized SingleDemo4 getInstance()
{
  if(s==null)
    synchornized(SingleDemo4.class)
   {
    if(s==null)
        s = new SingleDemo4();
    }
  return s;
}
}  


评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
刘腾 发表于 2012-11-19 22:47
懒汉模式可以这样理解:该单例类非常懒,只有在自己需要对象的时候才会判断是否已有对象,如果没有就创建一 ...

哦 好 非常感谢
回复 使用道具 举报
我也在这块有缺陷,谢谢各位啦!
回复 使用道具 举报
饿汉式:先初始化
   Single s=new Single();
        return s;
懒汉式:判断之后初始化
   single s=null;
     if(s==null)
        s=new Single();
     return s;

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
急着创建对象的就是饿汉式呀
class Single
{
private single(){}
private static single s = new Single();
public static Single getInstance()
{
  return s;
}
}
吃饱了就懒得动了,总是拖到最后才去创建就是懒汉式额
class  SingleDemo2
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
  if(s==null)
   s = new Single();
  return s;
}
}
个人的区分方式。。。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马