【并发编程】内存,volatiile,cas
一。可见性
内存分为主内存和线程内存,当线程开始时会把主内存需要的数据放到线程内存里,但线程内存的数据不会直接返回给主内存,这导致了多线程的情况下,对一个 数据不能做到即使反馈。
二。volatile
它可以用来修饰成员变量和静态成员变量,他可以避免线程从自己的工作缓存中查找变量的值,必须到主存中获取 它的值,线程操作 volatile 变量都是直接操作主存。
三。指令重排
JVM 会在不影响正确性的前提下,可以调整语句的执行顺序,这种特性称之为『指令重排』,多线程下『指令重排』会影响正确性。
volatile 修饰的变量,可以禁用指令重排。
被volatile修饰的变量在其读操作时产生读屏障,之后的代码不会排在其之前,在写操作时,其它代码不能排到它之后。
四。cas
cas全称为compareAndSet 比较并交换,是一个原子操作,在类unsafe在的方法。
cas必须和volatile配合。
cas特点: