java单例模式_Java几种方式实现单例模式之经验总结

最近总结了几种单例模式的实现,做个小总结给大家分享一下。

1、 单例模式,懒汉式,线程安全

032fd04fe0c131c141926ebd7c4791b1.png

image.png

2、 单例模式,懒汉式,线程不安全

97566f76f4f3e1e97fb5f043a9b2abb2.png

3、单例模式,饿汉式,线程安全,多线程环境下效率不高

5d9eeefe7531ec156f29c2ee27e9f07d.png

4、单例模式,懒汉式,变种,线程安全

78d0464182888575fc985da6ade11803.png

5、单例模式,使用静态内部类,线程安全(推荐)

359908bc9339d82c727f12d931f6cf10.png

6、 静态内部类,使用枚举方式,线程安全(推荐)

4acbd00ad3f4eeb9a6053d6f72b2619e.png

7、静态内部类,使用双重校验锁,线程安全(推荐)

005f249cd0715b205cd943b0fdd95765.png

8、AtomicSingleton 方式既能够保证延迟加载又能保证原子性及实例的唯一性,代码也相对比较简洁

9e6e3608e2e7b8b49d67fd414e990eed.png

对AtomicReference实现单例的总结:

AtomicReference是作用是对"对象"进行原子操作。通过源码可以看出,它是通过"volatile"和"Unsafe提供的CAS(比较与交换,Compare and swap,是一种有名的无锁算法函数)实现原子操作。

这种方式既能够保证延迟加载又能保证原子性及实例的唯一性,代码也相对比较简洁。

通过并发的学习与使用,线程的阻塞和上下文的切换会带来一定的性能开销,尤其在高并发的环境下。

而原子变量可以避免优先级倒置和死锁等危险,竞争比较便宜,协调发生在更细的粒度级别,允许更高程度的并发机制等等。

可以选择这种单例模式,不论从效率和并发方面都高于饿汉试和单汉试

枚举单例也是不错的选择,但是在4.0之后不在建议使用枚举(相传在性能上胡比较耗费资源)。枚举所开销的内存比其它的单例大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值