多线程之volatile

//volatile 保证线程变量的透明
public class Volatil {
 volatile int x =0; //线程共有内存变量,可获取最后一次写的值
 private int y = 0;
 
  private void write() {
   x = 5;
   y = 1;
  }
   
  private void read() {
   int dummy = y;
   while (x != 5) {
    System.out.println("..." + y + " dummy=" + dummy); //dummy与y的值不相等
   }
  }

 public static void main(String[] args) throws Exception {
  final Volatil v = new Volatil();
  Thread t1 = new Thread(
   new Runnable() {
    public void run() {
     v.write();
    }
   }
  );
  Thread t2 = new Thread(
   new Runnable() {
    public void run() {
     v.read();
    }
   }
  );
  
  t2.start();
  t1.start();

  t1.join();
  t2.join();
  System.out.println("x="+v.x + "  y="+v.y);
  System.out.println("***** over ***");
  
 }

}

猜你喜欢

转载自zw7534313.iteye.com/blog/2419664