1:导致线程问题的原因:
抢占式执行
多个线程同时修改了同一个变量
非原子性操作
内存可见性问题
指令重排问题
2:并发编程三大特性
可见性
原子性
有序性
3:volatile关键字
3.1 volatile解决了内存可见性和指令重排序的问题
写volatile变量:改变线程工作内存中的valatile变量的值,会立即从工作内存刷新到主内存中,
新值对所有线程立即更新。
读volatile变量:先从主内存读取volatile变量的最新值到线程的工作内存中,再从工作内存中读取volatile变量的副本值。
在多线程环境下volatile修饰的变量值一定是最新的。
volatile避免了指令重排优化(在单线程的情况下,指令重排优化没有问题,但是多线程的情况下有有问题),实现了有序性。
标签:Valiolate,12,java,变量,指令,volatile,内存,重排,线程 From: https://www.cnblogs.com/liufei1983/p/17437759.html