美文网首页
volatile关键字

volatile关键字

作者: voltric | 来源:发表于2018-10-25 20:12 被阅读14次

    volatile关键字

    @Date 2016.06.20

    共享变量

    • 多个线程之间能够被共享的变量
    • 存放在堆内存中的实例变量,静态变量,数组变量

    内存屏障

    • CPU指令,用于实现对内存操作的顺序限制

    Volatile

    • 确保所有线程看到这个变量的值是一致的
    • 不会引起线程上下文的切换和调度
    • JVM就会向处理器发送一条Lock前缀的指令
    • 缓存一致性协议: 当处理器发现自己缓存行对应的内存地址被修改,会将当前处理器的缓存行设置成无效状态
    • 将当前处理器缓存行的数据会写回到系统内存
    • 写回内存的操作会引起在其他CPU里缓存了该内存地址的数据无效
    • 大多数处理器高速缓存行是64个字节宽
    • 保证了可见性(对于一个变量i,多个线程同时去操作(比如++),i的值一定是0->1->2->3,而如果不加volatile则i的值可能是0->1->1->2)
    • 不保证顺序性和原子性(volatile不会锁住变量,你再对第一个变量i做完操作之后,下一个volatile变量j可能已经发生改变了)

    补充

    • 强制线程去主存中读取Heap的信息
    • 在并发时可以保证读取的最新的,但是不能保证对变量的操作是互斥以及顺序执行的

    相关文章

      网友评论

          本文标题:volatile关键字

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