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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 路国强 中级黑马   /  2013-12-16 17:43  /  1418 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



饿汉式代码:

  1. class Single
  2. {
  3.     private static final Single s = new Single();
  4.     private Single(){}
  5.     public static Single getInstance()
  6.     {
  7.         return s;
  8.     }
  9. }
复制代码

懒汉式代码:

  1. class Single
  2. {
  3.     private static Single s = null;
  4.     private Single(){}
  5.     public static Single getInstance()
  6.     {
  7.     if(s==null)
  8.         s = new Single();
  9.     return s;
  10.     }
  11. }
复制代码





评分

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

查看全部评分

6 个回复

正序浏览
饿汉式:类只要一加载,对象就存在了;
懒汉式:类加载,没有对象,只有通过getInstance()方法创建对象;(也叫延迟加载单例设计模式)
其实最大区别就是这个,单纯从代码上看!
但是:就如楼上那哥们所说,会有多线程的一个问题涉及到,懒汉式有可能导致对象保证不了唯一性,从而进行双层判断,而饿汉式就不需要考虑这方面问题.
PS:开发基本上都用饿汉式,,面试都会考你懒汉式,所以要知道这方面的.
回复 使用道具 举报

其实我看了老师的视频里面就只用这种
回复 使用道具 举报
小斥候 发表于 2013-12-16 18:04
我一般都是用饿汉模式的三部曲来写单例。

哦哦哦。嗖嘎
回复 使用道具 举报
本帖最后由 小斥候 于 2013-12-16 18:08 编辑

我一般都是用饿汉模式的三部曲来写单例。


1、首先把构造方法private化;
2、再new出一个私有的实例对象;
3、public一个方法(getInstance),让外部可以得到第二步的对象。
Single.getInstance();


评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
李然 发表于 2013-12-16 17:47
懒汉模式 ,饿汗模式的区别在于,懒汉模式是在getinstance方法中new的对象。但有个问题会涉及到多线程方面 ...

嗯,谢谢,学习了
回复 使用道具 举报
懒汉模式 ,饿汗模式的区别在于,懒汉模式是在getinstance方法中new的对象。但有个问题会涉及到多线程方面出现问题。解决方法是用双重判断,先用null判断一次,然后加同步线程锁,在锁内在进行null判断,
这样可以充分减少多操作对锁的访问。个人感觉还是直接用饿汉模式比较爽,没有后顾之忧。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1

查看全部评分

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