不稳定的关键字的两层语义

  
 <代码>一旦一个共享变量(类的成员变量,类的静态成员变量)被挥发性修饰之后,那么就具备了两层语义:
  
  1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
  (读取值时强行获取主内存中的值,设置值时将工作内存的数据刷新到主内存中)
  
  2)禁止进行指令重排序。
  
  注意:不具备原子性,使用也有很多限制,需要原子性则可以使用juc的锁机制,如:同步,锁,AtomicBoolean等 
  

volatitle经典案例:

  
 <代码>包测试;
  
  公共类RunThread扩展线程{/* *挥发性*/私人/*挥发性*/布尔正在=true;
  
  私人空间setRunning(布尔正在){
  这一点。正在=正在;
  }
  
  公共空间run () {
  System.out.println (Thread.currentThread () . getname() +”比;开始! ! !进入run()方法中…”);
  而(正在){
  }
  System.out.println (Thread.currentThread () . getname() +”比;停! ! !线程结束了……”+正在);
  }
  
  公共静态void main (String [] args)抛出InterruptedException {
  RunThread myThread=new RunThread ();
  myThread.start ();
  thread . sleep (3000);
  myThread.setRunning(假);
  System.out.println (Thread.currentThread () . getname() +”比;正在的值已经设置为了错误的”);
  }
  }
   
  
 <代码> #不加挥发性结果为:
  Thread-0祝辞开始! ! !进入run()方法中……
  main>正在的值已经设置为了假的
  
  #加挥发性结果为:
  Thread-0祝辞开始! ! !进入run()方法中……
  main>正在的值已经设置为了假的
  Thread-0>停! ! !线程结束了……假 

不稳定的关键字的两层语义