<代码>一旦一个共享变量(类的成员变量,类的静态成员变量)被挥发性修饰之后,那么就具备了两层语义: 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>停! ! !线程结束了……假代码>