黑马程序员技术交流社区
标题: 关于单例设计的懒汉式 [打印本页]
作者: 郭振 时间: 2012-5-7 08:46
标题: 关于单例设计的懒汉式
关于单例设计的帖子我看了不少,但是我还是有疑问,既然懒汉式比饿汉式多加了判断语句,还出现线程不同步的问题,为什么还有存在的意义?设计模式不就是个看上去简单,但是又非常不简单的问题。我很不理解?
作者: 赵玮_Tom 时间: 2012-5-7 09:03
我个人认为是为了节约内存。其实这些设计者们的思想是很严谨的。还记得写迭代器的时的循环while(it.hasNext())吗?java源码中使用的是for循环for(Iterator it = al.iterator(); it.hasNext();)。我们写代码时使用while循环是为了增强阅读性,而源码使用for循环是为了节约内存。而懒汉式单例设计模式的特点就是延迟创建对象,相对饿汉式要节约内存,在对内存占用要求较高的程序中有用武之地。
作者: 隋营营 时间: 2012-5-7 09:22
本帖最后由 隋营营 于 2012-5-7 09:27 编辑
饿汉式:
public class Treasure {
private static Treasure treasure = new Treasure();
private Treasure() {
}
public Treasure getInstance() {
return treasure ;
}
}
懒汉 式 :
public class Treasure {
private static Treasure treasure = null;
private Treasure() {
}
public static synchronized getInstance() {
if (treasure == null) {
treasure = new Treasure();
}
return treasure;
}
}
饿汉式是线程安全的 , 在类创建的同时就已经创建好一个静态对象供系统使用 , 以后不在改变
懒汉式如果在创建实例对象时不加上 synchronized 则会导致对象的访问不是安全的
在一般情况下推荐使用第一种
但是懒汉式也有存在的意义:当多线程同时访问时,会在牺牲效率的前提下保证安全!
作者: 黄或俊 时间: 2012-5-7 13:14
- class Single{
- public static Single s=null;
- private Single(){
-
- }
- public static Single getSingle(){
- if (s==null){
- synchronized(Single.class){
- if (s==null)
- s=new Single();
- }
- }
- return s;
- }
- }
复制代码 最有效率的单例设计模式的懒汉式,双重判断
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |