1.volatile关键字的两层语义
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:
1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序。
2.我理解的voletile
2.1 原子性:不保证原子性,只是保证从主内存读取的数据是最新的(如果多线程操作,会有线程安全问题;像自增操作不是原子性的,可能在读取数据之后线程1阻塞了,不能及时修改更新数据,后面的线程2读取的还是旧的数据,就算是后面线程2更改了数据,阻塞的线程1也不会更新数据,因为数据已经读到cpu了,而线程1缓存内存的数据会更新)
2.2 可见性:数据被修改后,其他线程立即可见(即其他线程的缓存内存数据立刻更新)
2.3 有序性:volatile之前的代码一定是在vaolatile执行前执行完毕,可以把volatile理解成分割层,volatile之后的不会跑到volatile之前执行