美文网首页
006 变量可见性 | volatile

006 变量可见性 | volatile

作者: __destory__ | 来源:发表于2019-03-20 21:02 被阅读0次

可见性含义

只是一个线程修改了某个变量的值,在另一个线程中能够读到这个修改后 的值

保持可见性的方式

通过以下几种方式实现可见性

  • volatile

锁(synchronized,Lock)通过线程阻塞的方式实现可见性。我们知道,在激烈竞争下,synchronized会升级为重量级锁,严重影响性能,相反的,volatile被称之为轻量级锁,在某些场景下,能够有效提升性能。

volatile

在生成汇编代码时会在volatile修饰的共享变量进行写操作的时候会多出Lock前缀 的指令,该前缀的作用,

  • 将当前处理器缓存行的数据写回系统内存
  • 这个写回内存的操作会使得其他CPU里缓存了该内存地址的数据无效

CPU在处理数据的时候,会将内存数据加载到CPU的高速缓存中进行计算,以此提升效率,但操作完不知道何时会写到内存。但是,使用volatile修饰的变量,JVM就会向处理器发送一条Lock前缀的指令,将这个变量所在缓存行的数据写回到系统内存。

写到内存还不行,得需要其他CPU知道这个事情,在多处理器下,为了保证各个处理器的缓存是一致的,就会实现缓存一致性协议,每个处理器通过嗅探在总线上传播的数据来检查自己缓存的值是不是过期了,当处理器发现自己缓存行对应的内存地址被修改,就会将当前处理器的缓存行设置成无效状态,当处理器对这个数据进行修改操作的时候,会重新从系统内存中把数据读到处理器缓存里。

使用volatile可以避免,在多线程条件下,不能让其他线程出现脏读,如果没有多线程访问,那么不需要使用volatile,让CPU自行决定何时写回内存。

有了volatile为何还用锁?

volatile可以实现轻量级锁,性能上优于锁,但是也不能过度使用volatile。

另外,volatile是变量修饰符,只能使用修饰变量,具有可见性,有序性(禁止重排),但是不具有原子性。言外之意,即使volatile修饰了某个变量,这个变量在其他方法中的操作不具有原子性,volatile无法控制其他方法中操作的共享问题。此时,锁的作用在这。

使用场景,

  • 适用于对变量的写操作不依赖于当前值,对变量的读取操作不依赖于非volatile变量。
  • 适用于读多写少的场景。
  • 可用作状态标志。

JDK中volatie应用:JDK中ConcurrentHashMap的Entry的value和next被声明为volatile,AtomicLong中的value被声明为volatile。AtomicLong通过CAS原理(也可以理解为乐观锁)保证了原子性。

相关文章

  • 006 变量可见性 | volatile

    可见性含义 只是一个线程修改了某个变量的值,在另一个线程中能够读到这个修改后 的值 保持可见性的方式 通过以下几种...

  • 多线程笔记

    1. volatile 1.1 volatile介绍 volatile保证了共享变量的“可见性”。可见性的意思是当...

  • 从volatile到Java内存模型

    volatile简介 volatile关键字用来修饰成员变量,用来保证并发环境下共享变量的可见性。那可见性是什么?...

  • 2. Java并发机制的底层实现原理

    1. volatile的应用 volatile是轻量级synchronized, 保证了共享变量的可见性, 可见性...

  • JVM 深入理解(四)内存模型 下

    volatile volatile变量自身具有下列特性: 可见性。对一个volatile变量的读,总是能看到(任意...

  • 解读volatile

    1.volatile初认识 Volatile 具有可见性和原子性。可见性对于一个volatile变量的读,总是能看...

  • 多线程 | Volatile到底有什么用?

    Volatile的作用: 保持内存可见性.内存可见性:多个线程操作同一个变量,可确保写线程更新变量,其他读线程可以...

  • Java之多线程和并发

    1.volatile变量 1.1 可见性 volatile修饰符保证volatile变量对所有线程可见,当一个线程...

  • 【并发编程】volatile

    volatile的作用 1、保证变量可见性 说到volatile,就不得不提一个词:“可见性”,可见性是指当多个线...

  • java volatile关键字作用及使用场景

    volatile关键字的作用:保证了变量的可见性(visibility)。被volatile关键字修饰的变量,如果...

网友评论

      本文标题:006 变量可见性 | volatile

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