Java语言包含两种内在的同步机制

来源:互联网 发布:关于淘宝货源 编辑:程序博客网 时间:2024/05/22 13:11

Java 语言包含两种内在的同步机制(都是为了实现代码线程的安全性):

(1)同步块(或方法)。即被synchronized 修饰的变量和方法。

(2) volatile 变量。 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。

 

正确使用volatile的条件

  • 对变量的写操作不依赖于当前值。
  • 该变量没有包含在具有其他变量的不变式中。
  •  

    条件解释

    在使用volatile关键字时要慎 重,并不是只要简单类型变量使用volatile修饰,对这个变量的所有操作都是原来操作,当变量的值由自身的上一个决定时,如n=n+1、n++ 等,volatile关键字将失效,只有当变量的值和自身上一个值无关时对该变量的操作才是原子级别的,如n = m + 1,这个就是原级别的。所以在使用volatile关键时一定要谨慎,如果自己没有把握,可以使用synchronized来代替volatile。

     

    具体例子可以参照:http://student.csdn.net/space.php?uid=44933&do=blog&id=10669