面试题剖析:单例设计模式线程安全问题

本文由叩丁狼高级讲师黄海燕撰写,探讨了volatile关键字的作用,包括防止指令重排和确保内存可见性。同时,文章分析了volatile与synchronized的区别,指出volatile不能保证原子性。在解决单例设计模式的线程安全问题上,通过双重检查锁定和避免指令重排,展示了如何使用volatile实现线程安全的懒汉式单例。
摘要由CSDN通过智能技术生成

本文作者:黄海燕,叩丁狼高级讲师。原创文章,转载请注明出处。

1. volatile 关键字

1.1 volatile 关键字作用:

在百度百科截取的描述如下:

叩丁狼教育.png

叩丁狼教育.png

说明volatile 关键字作用作用有两点:

  1. 防止指令重排:规定了volatile 变量不能指令重排,必须先写再读。

  2. 内存可见:线程从内存中读取volatile修饰的变量的数据,直接从主内存中获取数据,不需要经过CPU缓存,这样使得多线程获取的数据都是一致的。如图所示:


    叩丁狼教育.png

    叩丁狼教育.png

1.2 volatile和synchronized的区别

volatile不能够替代synchronized,原因有两点:

1.对于多线程,不是一种互斥关系
2.不能保证变量状态的“原子性操作”&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值