小王学习录
- 本月鸡汤:
- 什么是内存可见性问题
- 引起内存可见性问题的原因
- 如何解决内存可见性问题
- volatile使用规范
- 编外: 工作内存(工作存储区)
由前面文章介绍可以知道, 引起线程安全问题有
五个原因
, 分别是:
线程抢占式执行, 随即调度
(根本原因); 多个线程对同一变量执行
修改
操作;
非原子
操作;
内存可见性问题
;
指令重排序
. 而第二第三可以通过
上锁
来解决, 第四第五需要用到
volatile关键字
, 今天将介绍
volatile
关键字
本月鸡汤:
人之所以痛苦, 在于追求错误的东西.
什么是内存可见性问题
所谓内存可见性
, 就是当两个线程同时访问一个变量, 其中一个变量发生变化时, 另一个线程能够及时获取该变量的最新值, 注意区分这里的内存可见性和之前的脏读, 不可重复读
那么内存安全性问题
便是当两个线程同时访问一个变量, 其中一个变量发生变化时, 另一个线程无法获取该变量最新值, 这个问题要使用volatile来解决
引起内存可见性问题的原因
– 先看如下代码和其运行结果:
import java.util.Scanner;public class ThreadDome1 {int a = 0;public static void main(String[] args) {ThreadDome1 t = new ThreadDome1();Thread t1 = new Thread(()