# re: singleton的一点疑问 回复 更多评论
2006-11-29 18:19 by
第一种形式也不会生成多个实例的,每次都是返回的类初始化时构造的对象
第二种形式由于在调用方法时才生成实例并返回,考虑到可能多线程同时访问这个方法时,可能生成多个实例的情况,必须加synchronized关键字让方法变为同步,这样同一时间只能一个线程执行这个方法.
# re: singleton的一点疑问 回复 更多评论
2006-11-29 21:56 by
哦!线程安全!懂了,那相比而言,第一种形式是比较安全的。
那第二种形式并不比第一种形式效率高啊,怎么说是提高了效率呢?
# re: singleton的一点疑问 回复 更多评论
2006-11-30 02:59 by
个人感觉对一般的程序普通的这两种写法都是可以的
至于效率,应该是第一种高些,因为没有同步,不过也可能会有问题
这有一篇文章,超详细的米仔细看- -,你感兴趣去研究吧
http://www.blogjava.net/dreamstone/archive/2006/11/04/79026.aspx
# re: singleton的一点疑问 回复 更多评论
2006-11-30 09:24 by
谢了,太复杂了,字节码分析!
以后就用第一种形式了!
# re: singleton的一点疑问 回复 更多评论
2006-11-30 18:42 by
我觉得是因为第一种方式会在类加载的时候就初始化instance,而第二种会在使用时初始化,中间有一段时间不用吧~~
# re: singleton的一点疑问 回复 更多评论
2006-11-30 19:58 by
不对吧,这两个单态类只能通过Singleton.getInstance()来创建对象,所以应该都是调用时才初始化,不存在你所说的情况!
# re: singleton的一点疑问 回复 更多评论
2006-12-10 05:07 by
第一种是类加载时生成实例,第二种是调用方法时生成实例,生成实例也要占用内存影响效率,在需要的时候再生成实例,感觉第二种更有效率。