单例模式
来源:互联网 发布:fiil wireless 知乎 编辑:程序博客网 时间:2024/05/22 07:54
解决的问题:可以保证一个类在内存中的对象唯一性
对象唯一性
1.不允许其他程序用new创建对象。
2.在该类创建一个本类实例。
3.对外提供一个方法让其他程序可以获得该对象。
步骤:
1.私有化该类构造函数。
2.通过new在本类中创建一个本类对象。
3.定义一个共有的方法,将创建的对象返回。
饿汉式:(饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。)
public class Singleton {// 在类初始化时,已经自行实例化private Singleton() {};private static final Singleton single = new Singleton();public static Singleton getInstance() {return single;}}
懒汉式:(线程不安全)
public class Singleton {// 在第一次调用的时候实例化自己private Singleton() {};private static Singleton single = null;public static Singleton getInstance() {if (single == null) {single = new Singleton();}return single;}}懒汉式(在getinstance上加上synchroized)
public class Singleton {// 在第一次调用的时候实例化自己private Singleton() {};private static Singleton single = null;public static synchronized Singleton getInstance() {if (single == null) {single = new Singleton();}return single;}}
懒汉式(双重锁定)
public class Singleton {// 在第一次调用的时候实例化自己private Singleton() {};private static Singleton single = null;public static Singleton getInstance() {if (single == null) {synchronized (Singleton.class) {if (single == null) {single = new Singleton();}}}return single;}}
懒汉式(静态内部类)(推荐)
public class Singleton {private static class LazyHolder {private static final Singleton INSTANCE = new Singleton();}private Singleton() {}public static final Singleton getInstance() {return LazyHolder.INSTANCE;}}
主要区别:
线程安全:
饿汉式天生就是线程安全的。
懒汉式本身是非线程安全的。
资源加载和性能:
饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,
但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成,
而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,
如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- DAO层实现类CreatFactory.java
- 转载_Linux内核OOPS调试
- md5加密解密算法
- 移动互联网关键技术
- Contest1051 - 2016广东工业大学新生杯决赛网络同步赛暨全国新生邀请赛
- 单例模式
- (1)编译成功qground源码
- 仨笨贼逆向分析
- 第十二周输出以交换的两个值
- UML总结之状态图和活动图
- bitmap的六种压缩方式,Android图片压缩
- DelegatingFilterProxy
- 第十四周项目一(5)数组大折腾
- Android Material Design之Toolbar与Palette实践(转载)