首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

volatile域的运用

2012-11-23 
volatile域的使用volatile关键字为对一个实例的域的同步访问提供了一个免锁机制。如果你把域声明为volatile

volatile域的使用

volatile关键字为对一个实例的域的同步访问提供了一个免锁机制。如果你把域声明为volatile,那么编译器和虚拟机就知道该域可能会被另一个线程并发更新

有时候,只是为读写实例的一两个域就使用同步,其带来的开销似乎太大了。这种情况下可以使用volatile关键字


例如,假设一个对象有一个布尔标记,由一个线程设置它的值,而由另一个线程来查询它,那么有以下两个方法

1、使用锁,如下

private boolean done;

public  synchronized boolean isDone(){ return done;}

(这个方法有潜在的隐患:如果另一个线程已经对对象加了锁,isDone方法就会被阻塞)

2、将域声明为volatile

private volatile boolean done;

public boolean isDone(){ return done;}

(当然,访问一个volatile变量比访问一个一般变量要慢,这是为线程安全所付出的代价)


总之,在下面三个条件下,对一个域的并发访问是安全的

(1) 域是 volatile的

(2) 域是final的,并且在构造器调用完成后被访问

(3) 对域的访问有锁保护

热点排行