一. volatite 简述
Java 语言提供了一种稍弱的同步机制,即 volatile 变量.用来确保将变量的更新操作通知到其他线程,保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新. 当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的.
二. volatite 线程安全?
volatile 变量对所有线程是立即可见的,对 volatile 变量所有的写操作都能立即反应到其他线程之中,换句话说: volatile 变量在各个线程中是一致的,所以基于 volatile 变量的运算似乎是线程安全的。这个观点是错误的!
三. volatite 为什么是线程不安全的?

public class VolatileTest{public static volatile int i;public static void increase(){i++;}
}

javap -c -l VolatileTest.class

public class VolatileTest {public static volatile int i;public VolatileTest();Code:0: aload_01: invokespecial #1 // Method java/lang/Object."":()V4: returnLineNumberTable:line 1: 0public static void increase();Code:0: getstatic #2 // Field i:I, 把i的值取到了操作栈顶,volatile保证了i值此时是正确的.3: iconst_14: iadd // increase,但其他线程此时可能已经把i值加大了好多5: putstatic #2 // Field i:I ,把这个已经out of date的i值同步回主内存中,i值被破坏了.8: returnLineNumberTable:line 6: 0line 7: 8
}

从这个角度说 volatile 并不完全是线程安全的,虽然volatile 变量在读取和保存的时候是原子的,但是自增和自减操作由多个操作合成,它不是一个原子操作。

转载于:https://www.cnblogs.com/suxuan/p/4948745.html

Java并发编程-volatile相关推荐

  1. null在java存在的意义何在,Java并发编程——volatile关键字

    一.volatile是什么 volatile是Java并发编程中重要的一个关键字,被比喻为"轻量级的synchronized",与synchronized不同的是,volatile ...

  2. Java并发编程——volatile

    引 volatile可以看成是轻量级的低配版的Synchronized,他主要是作用于共享变量,保证共享变量的可见性.确保共享变量在主内存中一致地准确的更新通知到各个线程,这是Volatile的可见性 ...

  3. Java并发编程 Volatile关键字解析

    volatile关键字的两层语义 一旦一个共享变量(类的成员变量.类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了 ...

  4. Java并发编程—volatile关键字(保证变量的可见性、有序性机制)

    原文作者:Matrix海子 原文地址:Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程 ...

  5. java并发编程-volatile内存实现和原理

    2019独角兽企业重金招聘Python工程师标准>>> 前面的博文说了java的内存模型,介绍了java内存模型的基础,此篇文章来说一下volatile关键字,这个在并发编程中,占有 ...

  6. Java并发编程-Volatile和Syncronized关键字

    Java并发编程学习分享的目标 了解Java并发编程中常用的工具和类用途与用法 了解Java并发编程工具的实现原理与设计思路 了解并发编程中遇到的常见问题与解决方案 了解如何根据实际情景选择更合适的工 ...

  7. Java并发编程:volatile的使用

    1.CPU.主存及高速缓存的概念 计算机的硬件组成可以抽象为由总线.IO设备.主存.处理器(CPU)等组成.其中数据存放在主存中,CPU负责指令的执行,CPU的指令执行非常快,大部分简单指令的执行只需 ...

  8. Java并发编程--volatile关键字解析

    volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以 ...

  9. Java并发编程-volatile关键字介绍

    前言 要学习好Java的多线程,就一定得对volatile关键字的作用机制了熟于胸.最近博主看了大量关于volatile的相关博客,对其有了一点初步的理解和认识,下面通过自己的话叙述整理一遍. 有什么 ...

最新文章

  1. 国家标准油类计算机,食用油新国标正式实施 产品配方将不再是“机密”
  2. 如何测量接收机到卫星的距离
  3. VTK:KDTree时序用法实战
  4. python中os.system.获取输出信息_python中os.system()的返回值
  5. 一文教你玩转链上「动森」My Neighbor Alice
  6. 打不开内存卡,U盘提示未格式化的3种修复及数据恢复方法
  7. mysql 工具 08s01_Mysql管理必备工具Maatkit详解之十四(mk-kill)
  8. jenkins linux 发邮件,jenkins——邮件配置
  9. 牛客 2021年度训练联盟热身训练赛第二场 A题
  10. IntelliJ IDEA 2017.1 EAP与异步堆栈跟踪调试器扩展
  11. hanlp安装和使用
  12. python实现将将输入的可约分数化简为不可约分数
  13. OSPF之Stub区域
  14. ftp上传工具,八款最佳的ftp上传下载工具,支持中文(ftp客户端分享)
  15. 如何在一周内摸清一个行业
  16. 电视节目推广方案,综艺节目推广方案怎么写
  17. JVM3--垃圾回收机制:垃圾回收概述、垃圾回收算法及分类
  18. html页面input框输入不了,input框不能输入问题
  19. vue给url 中文参数 添加编码解码
  20. 简单分析为什么知识要付费

热门文章

  1. EXSI 连接硬件USB pass-through
  2. 一个人就需要对象之js中八种创建对象方式
  3. Java HashMap涉及的数据结构及实现
  4. django框架-DRF工程之认证功能
  5. electron 利用 electron-builder实现自动更新
  6. PHP 一个可以过滤非法脚本的函数
  7. 2015百度之星 列变位法解密
  8. Android设计模式系列(2)--SDK源码之观察者模式
  9. MPEG简介 + 如何计算CBR 和VBR的MP3的播放时间
  10. Wallop下蛋送邀请。