在并发编程中,我们通常会遇到以下三个问题:原子性问题,可见性问题,有序性问题。Java 语言为我们提供了解决上述问题的方法:
- 可见性:volatile、final 以及锁(synchronized、lock)实现;
- 原子性:JUC 包提供了一些原子类(如AutomicInteger)、锁实现;
- 有序性:volatile、锁实现。
初见之下,锁如同一把“万能钥匙”,但其缺陷也很明显——较“重”,并不适合简单的应用场景,比如,多线程环境下保证共享变量 i++ 操作的原子性,加锁可以实现,但有点“牛刀杀鸡”的味道。因此,Java 提供了更“轻”的方案:volatile、CAS 和 Automic 系列原子类。三者联系紧密,volatile 和 CAS 都是基于 LOCK 指令前缀实现的,Automic 系列原子类是基于 volatile 和 CAS 实现的。
本场 Chat 主要内容:
- 计算机和 JVM 内存模型简介;
- LOCK 指令介绍,“锁总线”、“锁缓存”实现原理;
- volatile 保证可见性、有序性的原理;
- CAS 原子性的实现原理;
- Automic 系列原子类实现原子操作的原理。
阅读全文: http://gitbook.cn/gitchat/activity/5bb09481d3799b04e4529857
您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。