volatile示例
- public class Test {
-
- volatile int a = 1;
- volatile boolean ready;
-
- public class PrintA extends Thread{
- @Override
- public void run() {
- while(!ready){
- Thread.yield();
- }
- System.out.println(a);
- }
- }
- public static void main(String[] args) throws InterruptedException {
- Test t = new Test();
- t.new PrintA().start();
- //下面兩行若是不加volatile的話,執行的前後順序是不可預測的。而且下面兩行都是原子操做,可是這兩行做爲一個總體的話就不是一個原子操做。
- t.a = 48; //這是一個原子操做,可是其結果不必定具備可見性。加上volatile後就具有了可見性。
- t.ready = true;//同理
- }
-
- }
歡迎關注本站公眾號,獲取更多信息