美文网首页
解读volatile

解读volatile

作者: 菜鸟欧 | 来源:发表于2017-06-15 08:55 被阅读0次

    1.volatile初认识

    Volatile 具有可见性和原子性。可见性对于一个volatile变量的读,总是能看到对这个变量最后的写入,原子性对任意单个变量的读写具有原子性,到类似++这种复合操作不具有原子性。

    volatile写读建立在happens-before关系上,可以实现线程之间通信。volatile的写-读与锁的释放-获取相同,volatile写与锁的释放对应,读与锁的获取对应。

    volatile写时,java并发控制会把该线程对应的本地内存中的变量刷新到主内存中。写线程向其它读线程发送消息。

    volatile读时,java内存模型JMM会把本地内存设置为无效,并把主内存的数据读取到本地共享变量中。读线程接受写线程发送的消息。

    写线程通过主内存向读线程发送消息实现线程之间通信。

    2.volatile内存语义实现

    重排序是为了提高性能,编译器和处理器会对相应的指令做重排序。分为编译器优化重排序,指令级并行重排序,内存系统重排序。

    当第二个操作是volatile写时,不管前面是什么操作都不能重排序,这个规则确保了volatile写之前的操作都不能被编译器重排序到volatile写之后。

    当第一个操作为volatile读时,不管后面是操作都不能重排序。这个规则确保volatile读之后的操作不会被编译器优化重排序到volatile读之前。

    当一个操作为写时,第二个为读不能重排序。

    编译器采用内存屏障来禁止重排序。

    相关文章

      网友评论

          本文标题:解读volatile

          本文链接:https://www.haomeiwen.com/subject/svryqxtx.html