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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© limengpiao 中级黑马   /  2014-9-10 14:32  /  1420 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java中单例模式除了饿汉式和懒汉式还有别的模式吗?饿汉式和懒汉式的区别又是什么,不知道哪位朋友能给解答下

8 个回复

倒序浏览
懒汉式能够延迟加载。。。
回复 使用道具 举报
15579171087 发表于 2014-9-10 14:33
懒汉式能够延迟加载。。。

呃,刚查了一些资料,理解你的意思了,好像还有线程同步的区别,谢谢啊
回复 使用道具 举报
饿汉式和懒汉式的区别
  1,饿汉式是空间换时间:会随着类的加载而加载,可能你用不到但是已经在堆里占用了空间
    懒汉式是时间换空间:用的时候才创建对象,但是会多增加代码,每次都要判断引用是不是空
  2,多线程访问饿汉式不会创建多个实例:只会创建一个实例对象,不会因为多线程多创建出对象.
   多线程访问懒汉式有可能会创建多个实例,所以多线程不能用懒汉式:在程序运行到判断是不是空的时候如果被其他线程抢过去,那么多个线程都会创建各自线程的实例对象,
开发中实际用的多为饿汉式,但是面试什么的都会问懒汉式.
还有一种就是:
1.私有构造函数
2.实例化本类对象,把引用定义成fianal和static的,这样就可以保证不被修改了
回复 使用道具 举报
单例设计模式:懒汉式、饿汉式、登记式、枚举式,我就知道这四种!
回复 使用道具 举报
本帖最后由 李春丽 于 2014-9-11 07:48 编辑

java中单例模式是一种常见的设计模式,我知道的有三种:懒汉式、饿汉式、登记式三种。
  单例模式有以下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。
区别:
懒汉式:多个人调用时(多线程),不能保证唯一。
对象是方法被调用时,才初始化,也叫做对象的延时加载。
Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。
  1. class Single
  2. {
  3. private Single(){}
  4. private static Single s = null;//Single类一进内存,赋值为空。
  5. public static Single getInstance()
  6. {
  7.   if(s==null)
  8.    s = new Single(); //发生在方法被调用时。注意,如果不执行这句代码,那么就不会给对象初始化。
  9.   return s;
  10. }
  11. }
复制代码
饿汉式     【开发一般用饿汉式】安全简单
这个是先初始化对象。
Single类一进内存,就已经创建好了对象。
  1. <p>class Single
  2. {
  3. private Single(){}
  4. private static Single s = new Single();//一进内存就马上创建对象。很饿,马上就吃,刻不容缓~~~~
  5. public static Single getInstance()
  6. {
  7.   return s;
  8. }</p><p>}</p>
复制代码

回复 使用道具 举报
路过学习
回复 使用道具 举报
noiary 来自手机 高级黑马 2014-9-10 23:27:17
8#
之前看过一个技术贴,说有七种
回复 使用道具 举报
7种~~~我飘过~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马