黑马程序员技术交流社区
标题:
延迟加载的单例模式(双重判断+同步代码块)的真正作用?
[打印本页]
作者:
dicegame
时间:
2013-7-28 15:39
标题:
延迟加载的单例模式(双重判断+同步代码块)的真正作用?
本帖最后由 杨兴庭 于 2013-7-29 11:12 编辑
class Single {
private static Single s = null;
private Single() {
}
public static Single getInstance() {
if(s == null) {
{synchronized(Single.class) {
if(s == null) {
s = new Single();
}
}
}
return s;
}
}
复制代码
顾名思义,延迟加载就是对象延迟加载到内存中
可是堆的空间很大的自由存储空间
一个对象能占多大空间呢?
搞这样一个模式的作用仅仅是优化内存吗?
很怀疑有没有别的作用?
作者:
toShareBeauty
时间:
2013-7-28 15:52
本帖最后由 toShareBeauty 于 2013-7-28 15:56 编辑
只有一个作用,就是第一次获取对象的时候,才创建该类的对象(饿汉式是类加载的时候创建),之所以用同步是为了多线程使用的时候,线程安全。双重判断是为了避免每次都去判断锁,以为判断锁比较低效。所以说推荐用饿汉式单例设计模式,简单,没有线程安全问题。单例设计模式的作用是保证整个系统中该类的对象只有一个。保证系统中该类对象只有一个可不是为了省内存,是为了设计需要,比如现实生活中的某些系统,某种东西只有一个。
作者:
薛鹏鹏
时间:
2013-7-28 16:58
单例设计模式的作用并不是为了优化内存。
而是保证一个类在内存中的对象的唯一性。如软件的配置文件,可以使用单例,保证配置文件只有一份。
之所以用到了同步,是因为在多线程中懒汉式即延迟加载会出每现安全问题。
双重判断是为了避免每次都去判断锁,每次判断锁比较低效。
懒汉式在开发中用的不多,一般用饿汉式,懒汉式多见于面试中。
/*饿汉式
class Single
{
private static final Single s = new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
*/
复制代码
作者:
dicegame
时间:
2013-7-29 00:02
哥几个说的我都懂
我问的是对象延迟加载到底有什么好处呢?
我怀疑延迟不仅仅是为了优化内存
作者:
toShareBeauty
时间:
2013-7-29 08:23
dicegame 发表于 2013-7-29 00:02
哥几个说的我都懂
我问的是对象延迟加载到底有什么好处呢?
我怀疑延迟不仅仅是为了优化内存 ...
这还有什么怀疑的。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2