【并发编程】内存,volatiile,cas

一。可见性

  内存分为主内存和线程内存,当线程开始时会把主内存需要的数据放到线程内存里,但线程内存的数据不会直接返回给主内存,这导致了多线程的情况下,对一个 数据不能做到即使反馈。

二。volatile

  它可以用来修饰成员变量和静态成员变量,他可以避免线程从自己的工作缓存中查找变量的值,必须到主存中获取 它的值,线程操作 volatile 变量都是直接操作主存。

三。指令重排

  JVM 会在不影响正确性的前提下,可以调整语句的执行顺序,这种特性称之为『指令重排』,多线程下『指令重排』会影响正确性。

  volatile 修饰的变量,可以禁用指令重排。

  被volatile修饰的变量在其读操作时产生读屏障,之后的代码不会排在其之前,在写操作时,其它代码不能排到它之后。

四。cas

  cas全称为compareAndSet 比较并交换,是一个原子操作,在类unsafe在的方法。

  cas必须和volatile配合。

  cas特点: