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. }
相關文章
相關標籤/搜索