Java volatile关键字和单例模式

博客围绕单例模式展开,提到单例模式一种实现中出现volatile关键字,并提出关于该关键字的疑问,如与多线程双重检查、synchronized的关系等。还介绍了单例模式优点,给出单例模式和volatile相关参考博文,指出volatile解决变量可见性和有序性,不解决原子性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在看单例模式的代码时,发现单例模式有一种实现方法中出现了volatile 关键字,这里就有了疑问:

为什么要使用volatile关键字??

volatile关键字与多线程中的双重检查有什么关系??

volatile与synchronized有什么关系???

 

单例模式的八种实现代码,参考以下博文:

        链接:https://www.cnblogs.com/zhaoyan001/p/6365064.html

        标题:单例模式的八种写法比较

        注:单例模式常常与工厂模式结合使用,因为工厂只需要创建产品实例就可以了,在多线程中也不会产生冲突,因此只需要一个工厂实例就可以。

                单例模式优点:减少了时间和空间的开销(new实例的开销);

                                          提高了封装性,外部不易改动实例。

volatile 的参考博文:

1 链接:https://blog.youkuaiyun.com/u012723673/article/details/80682208 (volatile关键字的最全总结)

2 链接:https://www.cnblogs.com/daxin/p/3364014.html 

3 链接: https://www.cnblogs.com/zhengbin/p/5654805.html

4 重排序相关博文:https://blog.youkuaiyun.com/lyt_7cs1dn9/article/details/73285957

                                https://blog.youkuaiyun.com/wpb92/article/details/76714329(多线程下双重检查锁的问题及解决方法)

5 链接:https://blog.youkuaiyun.com/dawanganban/article/details/39275863

6 链接:http://www.360doc.com/content/18/0120/15/20874412_723630367.shtml

需要理解的概念:Java内存模型的 可见性、原子性和有序性、volatile的底层原理以及volatile的读写性能消耗、计算机内存和缓存的区别。

 

总之,记住volatile解决了变量的可见性和有序性,并不能解决原子性,并且有序性一般是在多线程中出现的问题,在单线程中不会出现有序性的问题,及时出现重排序也不会影响程序运行结果。。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值