金融行业seo整站优化,搜索引擎排名优化seo课后题,厦门网站建设 首选猴子网络,宏泰机械网站建设关于volatile我们知道#xff0c;在Java中设置变量值的操作#xff0c;除了long和double类型的变量外都是原子操作#xff0c;也就是说#xff0c;对于变量值的简单读写操作没有必要进行同步。这在JVM 1.2之前#xff0c;Java的内存模型实现总是从主存读取变量#xff0c…关于volatile我们知道在Java中设置变量值的操作除了long和double类型的变量外都是原子操作也就是说对于变量值的简单读写操作没有必要进行同步。这在JVM 1.2之前Java的内存模型实现总是从主存读取变量是不需要进行特别的注意的。而随着JVM的成熟和优化现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下线程可以把变量保存在本地内存比如机器的寄存器中而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值而另外一个线程还继续使用它在寄存器中的变量值的拷贝造成数据的不一致。要解决这个问题只需要像在本程序中的这样把该变量声明为volatile不稳定的即可这就指示JVM这个变量是不稳定的每次使用它都到主存中进行读取。一般说来多任务环境下各任务间共享的标志都应该加volatile修饰。Volatile修饰的成员变量在每次被线程访问时都强迫从共享内存中重读该成员变量的值。而且当成员变量发生变化时强迫线程将变化值回写到共享内存。这样在任何时刻两个不同的线程总是看到某个成员变量的同一个值。 Java语言规范中指出为了获得最佳速度允许线程保存共享成员变量的私有拷贝而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。 这样当多个线程同时与某个对象交互时就必须要注意到要让线程及时的得到共享成员变量的变化。 而volatile关键字就是提示VM对于这个成员变量不能保存它的私有拷贝而应直接与共享成员变量交互。 使用建议在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中或者为常量时不必使用。 由于使用volatile屏蔽掉了VM中必要的代码优化所以在效率上比较低因此一定在必要时才使用此关键字。 转载于:https://www.cnblogs.com/talk/archive/2012/07/26/2609358.html