Volatile关键字详解
简介 在java中,每个线程有一块工作内存区,其中存放这被所有线程共享的主内存中变量值的拷贝。当线程执行时,它在自己的工作内存中操作这些变量。为了获取一个共享变量,一个线程先获取锁定并清除它的工作内存区,这就保证了该共享变量从所有的线程的共享主内存区正确的装入到线程的工作内存区,当线程解锁时保证该工作内存区的变量的值写回到共享主内存区。 线程工作内存和主内存的交互图如下: 从上图中可以看出,主内存和线程工作内存间的数据传输与线程工作内存和线程执行有一定的时间间隔,而且每次所消耗的时间可能还不相同,这样就存在线程操作的数据的不一致性。由于每个线程都有自己的线程工作内存,因此当一个线程改变自己工作内存中的数据的时候,对于其他系统来说可能是不可见的。因此,使用volatile关键字迫使所有的线程均读写主内存中对应的变量,从而使得volatile关键字修饰的变量在多线程间可见。 volatile修饰的变量,jvm虚拟机只是保证从主内存加载到线程工作内存的值是最新的。 声明为volatile的变量具有如下特性: 1、其他线程对变量的修改可以即时反映在当前线程中。 2、确保当前线程对volatile变量的修改,能即时的写回到共享主内存中,并被其他线程所见。 3、使用volatile修饰的变量,编译器会保证其有序性。 volatile分析 用在多线程