volatile示例

  1. public class Test {  
  2.   
  3.     volatile int a = 1;  
  4.     volatile boolean ready;  
  5.       
  6.     public class PrintA extends Thread{  
  7.         @Override  
  8.         public void run() {  
  9.             while(!ready){  
  10.                 Thread.yield();  
  11.             }  
  12.             System.out.println(a);  
  13.         }  
  14.     }  
  15.     public static void main(String[] args) throws InterruptedException {  
  16.         Test t = new Test();  
  17.         t.new PrintA().start();  
  18.         //下面两行若是不加volatile的话,执行的前后顺序是不可预测的。而且下面两行都是原子操做,可是这两行做为一个总体的话就不是一个原子操做。  
  19.         t.a = 48//这是一个原子操做,可是其结果不必定具备可见性。加上volatile后就具有了可见性。  
  20.         t.ready = true;//同理  
  21.     }  
  22.   
  23. }
相关文章
相关标签/搜索