关注
1. 单例模式定义与常见写法:单例模式要求一个类仅有一个对象实例,并提供全局访问点。常见写法有饿汉式、懒汉式、双重加锁验证、静态内部类、枚举等方式。
2. 重点实现方式剖析
- 双重加锁验证(DCL):先判断实例是否为空,为空时加锁,加锁后再次判断为空才创建对象,减少锁竞争以提升效率。不过存在指令重排问题,可能获取到未初始化完全的对象,在Java 5及后续版本,通过将实例变量声明为volatile可解决 。
- 静态内部类方式:借助JVM保证创建单例对象的线程安全与唯一性。外部类加载时,内部类不会立即加载,调用获取实例方法时才会加载并初始化单例对象,实现延迟加载,是较好的实现方法。
- 枚举方式:Effective Java作者推荐,是目前单例模式最佳实现。枚举初始化依靠static代码块,类加载时由JVM调度,线程安全。它还能防止反射和序列化破坏单例,反序列化通过Value方法查找枚举,而非新建对象。其他单例实现可在类上添加readResolve方法防止序列化破坏单例。
查看原帖
1 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 上班到公司第一件事做什么? #
111527次浏览 764人参与
# 工作两年想退休了 #
205656次浏览 1822人参与
# 七夕节你打算怎么过? #
69347次浏览 801人参与
# 运营面经 #
146320次浏览 1323人参与
# 参加过提前批的机械人,你们还参加秋招么 #
103987次浏览 1641人参与
# 如果公司降薪,你会跳槽吗? #
112699次浏览 729人参与
# 蚂蚁求职进展汇总 #
138987次浏览 1224人参与
# 运营商笔面经互助 #
189557次浏览 1795人参与
# 找工作能把i人逼成什么样 #
16902次浏览 192人参与
# 四大天坑是哪四家? #
91702次浏览 231人参与
# 网易求职进展汇总 #
169606次浏览 1414人参与
# 大厂面试初体验 #
84117次浏览 385人参与
# 什么样的公司千万别去 #
28619次浏览 151人参与
# 业务面应该做哪些准备 #
79518次浏览 814人参与
# 你今年做了几份实习? #
11495次浏览 167人参与
# 通信/硬件公司求职体验 #
178860次浏览 1025人参与
# 大学最后一个寒假,我想…… #
72750次浏览 730人参与
# 金三银四,你有感觉到吗 #
663571次浏览 6032人参与
# 大家每天通勤多久? #
64831次浏览 416人参与
# 一起聊华为 #
169484次浏览 826人参与