Java中的Volatile关键字

本节,我们聊一下java多线程环境中需要用到的volatile关键字。

如果的工作用到了多线程环境,volatile关键字是非常有用的。当多线程使用同一个变量的时候,每个线程对这个本来都有一个本地拷贝,所以,当线程更新变量的时候,更新的是本地缓存,而不是主存,使用这个变量的别的线程是不知道这个变量被修改了。为了避免这种情况,你可以把这个变量声明为volatile类型,这样的话,就不会有本地拷贝了,无论什么时候,有线程要更新这个值的时候,它更新主存里面这个值,这样的话,其他线程也可以看到它的修改。

class ExampleThread extends Thread {
 private volatile int testValue;
  public ExampleThread(String str){
    super(str);
 }
 public void run() {
  for (int i = 0; i <; 3; i++) {
    try {
     System.out.println(getName() + " : "+i);
     if (getName().equals("Thread 1 ")){
        testValue = 10;
    }
    if (getName().equals("Thread 2 ")){
        System.out.println( "Test Value : "
             + testValue);
    }
    Thread.sleep(1000);
    } catch (InterruptedException exception) {
        exception.printStackTrace();
    }
}
}
}
public class VolatileExample {
 public static void main(String args[]) {
  new ExampleThread("Thread 1 ").start();
  new ExampleThread("Thread 2 ").start();
 }
}

原文地址:http://www.javabeat.net/2009/02/volatile-keyword-in-java/

One thought on “Java中的Volatile关键字

  1. chiukong

    volatile的实际应用场景貌似不多。实际编程也几乎没有遇到过。多线程下这个的用处也很有限吧,因为不能保证原子性。。

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>