java多线程之volatile关键字

操作方法

  • 01

    Java线程:volatile关键字 Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。 谈及到volatile关键字,不得不提的一篇文章是:《Java 理论与实践: 正确使用 Volatile 变量》,这篇文章对volatile关键字的用法做了相当精辟的阐述。 之所以要单独提出volatile这个不常用的关键字原因是这个关键字在高性能的多线程程序中也有很重要的用途,只是这个关键字用不好会出很多问题。 首先考虑一个问题,为什么变量需要volatile来修饰呢? 要搞清楚这个问题,首先应该明白计算机内部都做什么了。比如做了一个i++操作,计算机内部做了三次处理:读取-修改-写入。 同样,对于一个long型数据,做了个赋值操作,在32系统下需要经过两步才能完成,先修改低32位,然后修改高32位。 假想一下,当将以上的操作放到一个多线程环境下操作时候,有可能出现的问题,是这些步骤执行了一部分,而另外一个线程就已经引用了变量值,这样就导致了读取脏数据的问题。 通过这个设想,就不难理解volatile关键字了。 volatile可以用在任何变量前面,但不能用于final变量前面,因为final型的变量是禁止修改的。也不存在线程安全的问题。 更多的内容,请参看::《Java 理论与实践: 正确使用 Volatile 变量》一文,写得很好。

(0)

相关推荐

  • JAVA线程安全:[4]volatile关键字

    volatile是java提供的一种同步手段,只不过它是轻量级的同步,为什么这么说,因为volatile只能保证多线程的内存可见性,不能保证多线程的执行有序性.而最彻底的同步要保证有序性和可见性,例如 ...

  • java的循环结构及关键字介绍

    java的循环结构主要有三种 while ,do while,for.循环是java编程的最基本的应用之一,广泛的应用在我们的开发中,本文我将详细介绍这几种循环的用法以及循环中应用的关键字. 操作方法 ...

  • C语言中关键字const、volatile、extern的作用

    C语言中关键字const.volatile.extern的作用 操作方法 01 const:被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.它可以修饰函数的参数.返回值, ...

  • JAVA线程安全:[1]浅谈JAVA内存模型

    关于java线程安全,网上有很多资料,我只想从自己的角度总结对这方面的考虑,有时候写东西是很痛苦的,知道一些东西,但想用文字说清楚,却不是那么容易.我认为要认识java线程安全,必须了解两个主要的点: ...

  • java中继承到底指继承的什么

    java中的继承 操作方法 01 1.java类中继承的关键字是extends,一般说子类继承了父类 例如:父类是Animals.java       子类是Cat.java 声明子类的写法是:pub ...

  • Java中的main()方法详解

    在Java中,main()方法是Java应用程序的入口方法,,因为JAVA是在C++的基础上开发的语言,main也是c++的程序入口,这里就说一下JAVA的main方法.也就是说,程序在运行的时候,第 ...

  • Volatile认识

    操作方法 01 volatile的本意是"易变的" 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义; 解释如下,从例子去说明,比如有个程序 ...

  • foreach的用法

    介绍一些语言的for each的用法,如:Java语言. Java语言 01 Java中没有foreach这个关键字,但是用for表达式达到foreach的功能. Java的for表达式支持迭代(遍历 ...

  • 安装JDK报错 Error opening registry key

    对于Java开发人员或者学习者来讲,安装jdk环境是必不可少的.今天我们来谈谈安装完并且配置完环境变量后在dos命令行输入java命令结果报如下错误信息: Error opening registry ...