关闭

关于Java中的关键字volatile的理解

173人阅读 评论(0) 收藏 举报
分类:

参考:http://zhidao.baidu.com/link?url=SZIOANgZCGb1t1DcuIQ1SVCwDlbVuIb8w5p1FLpUWhfo34zCAYs7eyxMUNeMohRVpgkajMCpUZTQdlGz7XiUhq

Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。


Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。

这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。

而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。

使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。

由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。

就跟C中的一样 禁止编译器进行优化~~~~


http://zhidao.baidu.com/link?url=SZIOANgZCGb1t1DcuIQ1SVCwDlbVuIb8w5p1FLpUWhfo34zCAYs7eyxMUNeMohRVpgkajMCpUZTQdlGz7XiUhq

Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。

这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。

而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。

使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。

由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。

就跟C中的一样 禁止编译器进行优化~~~~


0
0
查看评论

java中的volatile关键字的功能详解

Cookie的应用场景: 1,记录用户的登陆状态,提示用户是否记住密码; 2,购物车购物功能; 我们知道,在web开发过程中,我们都要和cookie打交道,有时候离开了cookie还真玩不转。cookie最典型的应用莫过于登陆提示,最近在做一个小项目,正好要用到cookie的知识,在这里顺便做一...
  • reggergdsg
  • reggergdsg
  • 2015-12-11 22:01
  • 2305

java volatile关键字(及使用场景)

当一个变量被定义为volatile之后,就可以保证此变量对所有线程的可见性,即当一个线程修改了此变量的值的时候,变量新的值对于其他线程来说是可以立即得知的。可以理解成:对volatile变量所有的写操作都能立刻被其他线程得知。但是这并不代表基于volatile变量的运算在并发下是安全的,因为vola...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2016-02-24 10:55
  • 2060

全面理解Java内存模型(JMM)及volatile关键字

【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/72772461 出自【zejian的博客】 关联文章: 深入理解Java类型信息(Class对象)与反射机制 深...
  • javazejian
  • javazejian
  • 2017-06-12 11:25
  • 10803

Java线程面试题(03) Java中的volatile如何工作? Java中的volatile关键字示例

什么是Java中的volatile变量以及何时使用Java中的volatile变量是一道Java面试中经常被问及的多线程访问问题。尽管许多程序员知道什么是volatile变量,但是他们在回答第二部分问题什么地方使用volatile变量时失败,因为大部分人对Java中volatile变量并没有一个清晰...
  • u010096900
  • u010096900
  • 2017-11-27 13:03
  • 339

Java并发编程-正确理解volatile关键字的两层语义

关于关键字volatile可以说是Java虚拟机提供的轻量级的同步机制,但是它并不容易完全被正常、完整地理解,以至于许多程序员都不习惯去使用它,遇到需要处理多线程数据竞争问题的时候一律使用Synchronized来进行同步。了解volatile变量的语义对了解多线程操作的其他特性很有意义。本篇文章将...
  • chenchaofuck1
  • chenchaofuck1
  • 2016-06-17 20:16
  • 1483

java-Transient关键字、Volatile关键字介绍和序列化、反序列化机制、单例类序列化

- Transient关键字 Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想 用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字trans...
  • u010156024
  • u010156024
  • 2015-09-14 18:52
  • 3384

C语言再学习 -- 关键字volatile

占楼
  • qq_29350001
  • qq_29350001
  • 2017-01-04 20:42
  • 3729

Java中volatile关键字的作用

在Java内存模型中,有main memory(主内存)还每个线程各自的线程内存memory(例如:寄存器)。为了性能一个线程会在自己memory中保持要访问变量的副本。这样就会出现同一个变量在某一个时刻一个线程内存中的值和其他线程内存或者主内存中的值不一致。 一个变量声明为volatile,就意...
  • fuyuwei2015
  • fuyuwei2015
  • 2015-05-07 22:39
  • 704

Java 关键字volatile 与 synchronized 作用与区别

1,volatile    volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的。   在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器)。为了性能,一个线程会在自己的memory中保持要访问的变量的...
  • HGuang_ZJH
  • HGuang_ZJH
  • 2014-04-13 23:10
  • 4018

多线程之volatile关键字

之前讲解了多线程的synchronized关键字,现在再学习一下volatile关键字。1 volatile关键字用来做什么?线程安全包括两个方面:原子性和可见性。Java的同步机制都是围绕这两个方面来确保线程安全的。其中原子性是指多个动作必须依次连续完成,必须保持一致性和完整性,这可以通过sync...
  • Trigl
  • Trigl
  • 2016-04-15 20:43
  • 1212
    个人资料
    • 访问:11488次
    • 积分:409
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:5篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论