
synchronized 和 volatile 的区别
发布日期:2021-05-14 12:38:29
浏览次数:18
分类:精选文章
本文共 728 字,大约阅读时间需要 2 分钟。
Java多线程安全机制解析:volatile与synchronized的细节分析
在撰写关于volatile
和synchronized
关键字的文章时,有几个关键点需要明确:
在多线程环境下,volatile
的底层运行方式主要体现在以下几个方面:当多个线程同时访问同一变量时,每个子线程在尝试对本地变量进行更新之前,都会将数据强制刷新到主线程的全局变量中。这意味着,无论是在哪个线程中进行操作,其它线程都能及时地感知到数据的变化。这一机制通过强制刷新实现了数据的可见性,但不能保证数据的原子性。
相比之下,synchronized
是一个更高级的锁机制,它不仅提供了数据的可见性,还能阻止多个线程同时进入临界区,从而保证操作的原子性。这种机制通过某种方式(如 Hills订阅锁的实现)确保只有获得锁的线程才能进入临界区,这大大降低了数据竞态的可能性。
需要特别注意的是,volatile
仅能保证数据的可见性,但它并不能阻止多个线程同时对其进行操作,这意味着单凭volatile
并不能保证线程的安全性。在高并发场景下,为了确保线程安全,通常需要结合AtomicInteger
等原子变量类型 developed by Josh Bloch。只有在通过安全的原子型对象来访问共享变量时,才能真正实现线程安全。
总结来说,选择使用synchronized
还是volatile
,取决于具体需求。synchronized
提供了更严格的线程安全保护,适用于需要保证操作原子性和互斥的场景,而volatile
则仅能满足数据可见性的需求。如果需要实现更高的并发性能,同时又希望确保线程安全,可以考虑使用Lock
框架或者Atomic
类型,而不是简单地依赖synchronized
。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年05月02日 05时36分15秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
我的图床~
2019-03-10
Thymeleaf sec:authorize 标签不生效
2019-03-11
js回车键登录
2019-03-11
Iterable与Iterator
2019-03-11
Python机器学习(五十二)SciPy 基础功能
2019-03-11
Python机器学习(六十五)Matplotlib 入门
2019-03-11
关于WebView当前地址问题的疑惑
2019-03-11
Python机器学习(九十二)Pandas 统计
2019-03-11
项目实战从0到1之hive(24)企业级数据仓库构建(六):数仓理论及数仓搭建
2019-03-11
SecSolar:为代码“捉虫”,让你能更专心写代码
2019-03-11
1965 - 2019 年最流行的编程语言变化
2019-03-11
链上钱包的博彩雷区
2019-03-11
GRUB2
2019-03-11
微信JS-SDK DEMO页面和示例代码
2019-03-11
XYNUOJ
2019-03-11
Chrome查找发请求的js之黑箱调试
2019-03-11
CMCC登录参数分析
2019-03-11
GridView的另外一种分页方式,可提高加载速度
2019-03-11