本章先对Java个版本中的主要并发技术进行简述。
一.JDK1.4及之前
在JDK1.4及之前的版本,主要提供的并发技术有:
- synchronized关键字
- volatile关键字
- 不变模式
1.volatile关键字
被volatile修饰的变量能保证器顺序性和可见性
-
顺序性:
- 对一个volatile变量的写操作先行发生于后面对这个变量的读操作。“后面”指时间上的先后顺序
-
可见性
- 当写一个 volatile 变量时,JMM 会把该线程对应的工作内存中的共享变量刷新到主内存。
- 当读一个 volatile 变量时,JMM 会把该线程对应的工作内存置为无效,线程接下来将从主内存中读取共享变量。
volatile相比于synchronized/Lock是非常轻量级,但是使用场景是有限制的:
- 对变量的写入操作不依赖于其当前值,即仅仅是读取和单纯的写入,比如操作完成、中断或者状态之类的标志
- 禁止对volatile变量操作指令的重排序
实现原理