Java并发编程-volatile
一. 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相关推荐
- null在java存在的意义何在,Java并发编程——volatile关键字
一.volatile是什么 volatile是Java并发编程中重要的一个关键字,被比喻为"轻量级的synchronized",与synchronized不同的是,volatile ...
- Java并发编程——volatile
引 volatile可以看成是轻量级的低配版的Synchronized,他主要是作用于共享变量,保证共享变量的可见性.确保共享变量在主内存中一致地准确的更新通知到各个线程,这是Volatile的可见性 ...
- Java并发编程 Volatile关键字解析
volatile关键字的两层语义 一旦一个共享变量(类的成员变量.类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了 ...
- Java并发编程—volatile关键字(保证变量的可见性、有序性机制)
原文作者:Matrix海子 原文地址:Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程 ...
- java并发编程-volatile内存实现和原理
2019独角兽企业重金招聘Python工程师标准>>> 前面的博文说了java的内存模型,介绍了java内存模型的基础,此篇文章来说一下volatile关键字,这个在并发编程中,占有 ...
- Java并发编程-Volatile和Syncronized关键字
Java并发编程学习分享的目标 了解Java并发编程中常用的工具和类用途与用法 了解Java并发编程工具的实现原理与设计思路 了解并发编程中遇到的常见问题与解决方案 了解如何根据实际情景选择更合适的工 ...
- Java并发编程:volatile的使用
1.CPU.主存及高速缓存的概念 计算机的硬件组成可以抽象为由总线.IO设备.主存.处理器(CPU)等组成.其中数据存放在主存中,CPU负责指令的执行,CPU的指令执行非常快,大部分简单指令的执行只需 ...
- Java并发编程--volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以 ...
- Java并发编程-volatile关键字介绍
前言 要学习好Java的多线程,就一定得对volatile关键字的作用机制了熟于胸.最近博主看了大量关于volatile的相关博客,对其有了一点初步的理解和认识,下面通过自己的话叙述整理一遍. 有什么 ...
最新文章
- 国家标准油类计算机,食用油新国标正式实施 产品配方将不再是“机密”
- 如何测量接收机到卫星的距离
- VTK:KDTree时序用法实战
- python中os.system.获取输出信息_python中os.system()的返回值
- 一文教你玩转链上「动森」My Neighbor Alice
- 打不开内存卡,U盘提示未格式化的3种修复及数据恢复方法
- mysql 工具 08s01_Mysql管理必备工具Maatkit详解之十四(mk-kill)
- jenkins linux 发邮件,jenkins——邮件配置
- 牛客 2021年度训练联盟热身训练赛第二场 A题
- IntelliJ IDEA 2017.1 EAP与异步堆栈跟踪调试器扩展
- hanlp安装和使用
- python实现将将输入的可约分数化简为不可约分数
- OSPF之Stub区域
- ftp上传工具,八款最佳的ftp上传下载工具,支持中文(ftp客户端分享)
- 如何在一周内摸清一个行业
- 电视节目推广方案,综艺节目推广方案怎么写
- JVM3--垃圾回收机制:垃圾回收概述、垃圾回收算法及分类
- html页面input框输入不了,input框不能输入问题
- vue给url 中文参数 添加编码解码
- 简单分析为什么知识要付费