设计模式----单例模式
来源:互联网 发布:数据汇总日语怎么说 编辑:程序博客网 时间:2024/06/02 00:17
单例模式 共 懒汉式 饿汉式 双重检测锁 静态(static)内部类 枚举类5种实现方式
现在说每个方式的优缺点
首先看一个大家随手就能写的 单例模式(懒汉式式的写法) 但这个是非线程安全的
为了实现线程安全 懒汉式的升级写法
但这其实还是保证不了线程安全的
我们再进一步升级
这个还是有问题的
那懒汉究竟怎样才能线程安全呢
那就进入到进化变异版了
双重检测锁
之前很多人 知其一不知其二 ,说它不推荐使用。
但错了 , 是1.5之前不推荐 , 1.5之后已经没这个问题了 。原因:因为jdk又花了,好像是哪个关键字吧----volatile (
new不是个原子操作,后面优化了volatile语义,然后双重变的正常了
) 现在懒汉 和 双重检测锁 说完了
继续饿汉式
饿汉式本身是线程安全的 原因也很简单
饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。
现在看看代码就知道了
但是饿汉式有个缺点是不能延时加载
再说个静态内部类的实现
这个也是线程安全的 , 并且可以实现延时加载 , 也是最为常用的 。 但是它们都有一个致命缺陷。
对 类的方式都可以被反射 , 被序列化破解
这是枚举的形式 线程安全,调用效率高,但是,不能延时加载
能不能延时加载 调用效率 和 线程安全问题 。是你考虑使用何种单例实现的考量
静态内部类方式 也是可以被破解的
如果你的项目是内部项目 没必要非得使用枚举式 , 毕竟它不能够延时加载
0 0
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 设计模式-单例模式
- [设计模式] 单例模式
- 设计模式--单例模式
- 设计模式---单例模式
- 设计模式--单例模式
- 设计模式 -----单例模式
- 设计模式:单例模式
- iOS在cell中使用倒计时的处理方法
- html5 audio的使用
- php数组式访问借口ArrayAccess
- Ubuntu14.04 Android7.0 编译 Out of memory error
- Leetcode学习(37)—— Construct the Rectangle
- 设计模式----单例模式
- 访问前台页面${pageContext.request.contextPath}/el表达式失效问题解决
- .net 实现MD5加密功能
- QT之在多个按钮中任选一个按钮,执行被选中的按钮功能
- SpringMVC 限流
- cloudera manager
- 欢迎使用CSDN-markdown编辑器
- PostgresDBlink 数据库跨库查询
- GNU make项目管理学习笔记