volatile

原创 2015年11月20日 20:29:10

为了保证速度,处理器和内存不直接通信,而是通过将系统内存的数据读到缓存l1,l2等,然后再进行读写,如果变量是volatile的,那么在生成汇编代码时候会多产生一句lock开头的指令,x86处理器对lock开头的汇编是这样处理的,将缓存内直接写入内存,其它处理器的缓存了本变量都会失效,下次重新在内存读取。注意缓存读取是64个字节一起读取,所以有追加字节一说

代码(编译器)-字节码(jvm)-汇编指令,


volatile是轻量级的synchronized,不会引起上下文切换



volatile修饰符的作用

作用 volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值. 简单地说就是防止编译器对代码进行优化.比如如下程序: XBYTE[2]...
  • coolibin
  • coolibin
  • 2013年03月21日 20:38
  • 1269

不要使用volatile

为什么不应该使用“volatile”类型C程序员通常认为volatile表示某个变量可以在当前执行的线程之外被改变;因此,在内核 中用到共享数据结构时,常常会有C程序员喜欢使用volatile这类变...
  • Hsu_smile
  • Hsu_smile
  • 2016年03月31日 14:59
  • 450

多线程之volatile关键字

之前讲解了多线程的synchronized关键字,现在再学习一下volatile关键字。1 volatile关键字用来做什么?线程安全包括两个方面:原子性和可见性。Java的同步机制都是围绕这两个方面...
  • Trigl
  • Trigl
  • 2016年04月15日 20:43
  • 1112

举例解析Java中Volatile的作用

volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。...
  • xilove102
  • xilove102
  • 2016年09月05日 09:37
  • 498

浅谈volatile关键字

Java的volatile关键字在JDK源码中经常出现,但是对它的认识只是停留在共享变量上,今天来谈谈volatile关键字。volatile,从字面上说是易变的、不稳定的,事实上,也确实如此,这个关...
  • u011519624
  • u011519624
  • 2017年03月19日 18:10
  • 757

Java并发——线程同步Volatile与Synchronized详解

Java面试——线程同步volatile与synchronized详解 0. 前言面试时很可能遇到这样一个问题:使用volatile修饰int型变量i,多个线程同时进行i++操作,这样可以实现线程安全...
  • SEU_Calvin
  • SEU_Calvin
  • 2016年08月30日 19:09
  • 13603

volatile变量类型的详细说明

关键字volatile是java虚拟机提供的最轻量级的同步机制
  • jimolangge123
  • jimolangge123
  • 2014年04月19日 14:12
  • 1233

如何正确使用volatile变量

Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,...
  • SmuEdward
  • SmuEdward
  • 2017年01月17日 17:30
  • 631

嵌入式中 volatile 用法

1、引言volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行...
  • xy010902100449
  • xy010902100449
  • 2015年09月14日 17:10
  • 870

Java中volatile的作用以及用法

找了很多资料,包括《java并发编程实战》,综合一下各家的说法就是: volatile让变量每次在使用的时候,都从主存中取。而不是从各个线程的“工作内存”。 volatile具有synchroni...
  • imzoer
  • imzoer
  • 2013年02月28日 10:27
  • 30684
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:volatile
举报原因:
原因补充:

(最多只允许输入30个字)