标题:关于java中单例模式的介绍(懒汉模式,饿汉模式)
只看楼主
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:39
帖 子:423
专家分:1871
注 册:2018-2-6
结帖率:100%
已结贴  问题点数:20 回复次数:6 
关于java中单例模式的介绍(懒汉模式,饿汉模式)
懒汉模式:创建对象之前会做一非空判断,如果有现成的对象,就不创建新的,没有现成的就创建一个新的。
程序代码:
package com.xiaoa.demo;

/**

 * 懒汉模式

 * 

 * @author niyite

 *

 */
public class LazySingle {
    private static LazySingle newInstance = null;

    private LazySingle() {
    }

    public static LazySingle getnewInstance() {
        if (newInstance == null) {
            newInstance = new LazySingle();
        }
        return newInstance;
    }
}

加锁懒汉模式,在创建新对象之前加了一个同步锁,避免了多线程情况下的线程安全问题。
程序代码:
package com.xiaoa.demo;

/**

 * 加锁懒汉模式

 * 

 * @author niyite

 *

 */
public class SyncLazySingle {
    private static SyncLazySingle newInstance = null;

    private SyncLazySingle() {
    }

    public static SyncLazySingle getnewInstance() {
        if (newInstance == null) {
            synchronized (SyncLazySingle.class) {
               if (newInstance == null) newInstance = new SyncLazySingle();
            }
        }
        return newInstance;
    }
}

 饿汉模式:操作最简单
程序代码:
package com.xiaoa.demo;

/**

 * 饿汉模式

 * 

 * @author niyite

 *

 */
public class HungrySingle {
    private static final HungrySingle newInstance = new HungrySingle();

    public HungrySingle() {
    }

    public static HungrySingle getnewInstance() {
        return newInstance;
    }

}


[此贴子已经被作者于2018-4-19 08:29编辑过]

搜索更多相关主题的帖子: 模式 public private static null 
2018-04-17 19:37
有多难
Rank: 2
等 级:论坛游民
帖 子:39
专家分:39
注 册:2018-3-26
得分:10 
为什么单例模式会有懒汉和饿汉的区别?有什么区别?
2018-04-18 22:58
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:10 
[quote]以下是引用疯狂的小a在2018-4-17 19:37:08的发言:

加锁懒汉模式,在创建新对象之前加了一个同步锁,避免了多线程情况下的线程安全问题。
package com.xiaoa.demo;

/**
 * 加锁懒汉模式
 *
 * @author niyite
 *
 */
public class SyncLazySingle {
    private static SyncLazySingle newInstance = null;

    private SyncLazySingle() {
    }

    public static SyncLazySingle getnewInstance() {
        if (newInstance == null) {
            synchronized (SyncLazySingle.class) {
                newInstance = new SyncLazySingle();
            }
        }
        return newInstance;
    }
}




版主你这个懒汉模式不行啊,要是里面还没创建好,外面的线程就到if那边判空,释放锁之后再进去创建的话。。。。不是产生多个实例吗?

剑栈风樯各苦辛,别时冰雪到时春
2018-04-18 23:48
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:39
帖 子:423
专家分:1871
注 册:2018-2-6
得分:0 
回复 3楼 林月儿
眼神真好!感谢!!
已经修改,应该再没问题了吧....

假如人生没有梦想,和咸鱼有什么区别!
2018-04-19 08:31
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:39
帖 子:423
专家分:1871
注 册:2018-2-6
得分:0 
回复 楼主 疯狂的小a
有区别的,单例模式是表示单例的,是一种思想。比如如果一个对象很复杂,占用资源太多,就要求是单例的。

假如人生没有梦想,和咸鱼有什么区别!
2018-04-19 08:34
springtime
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-4-25
得分:0 
2018-04-25 22:31
asd769496943
Rank: 1
等 级:新手上路
帖 子:4
专家分:7
注 册:2020-3-3
得分:0 
问一下 怎么用懒汉模式实现任务管理器啊
2020-03-18 10:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486148-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.230999 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved