当前位置:嗨网首页>书籍在线阅读

35-运用volatile关键字

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.10 运用volatile关键字

几乎所有应用都会读写数据到计算机的主存里面。出于性能原因,这些操作都不是直接运行在内存中的。由于CPU有一个缓存系统,因此应用可以将数据写到缓存中,然后把数据从缓存移动到主存中。

在多线程应用中,并发线程运行在不同CPU或CPU的不同内核上。当一个线程修改了一个存储在内存中的变量后,这种修改是在运行中的缓存、CPU或内核上进行的。但是,仍存在不能保证修改的结果能够到达主存的情况。如果其他线程想要读取该数据,则有可能出现它读取不到修改后的值的情况,因为它并没有在计算机的主存上。

为了处理该问题(有其他解决方案,例如 synchronized 关键字),Java语言发明了 volatile 关键字。它是一个修饰符,允许指定一个变量的读取和存储都必须在主存中而不能在缓存中进行。在其他线程对该变量的实际值可见的时候应该对其使用 volatile 关键字,这是非常重要的;但是,顺序访问该变量时就不那么重要了。在该场景中, volatile 关键字将会带来更好的性能,因为它不需要任何监视器或者锁来访问变量。相反,如果有序访问变量是很重要的,则必须使用其他同步机制。

本节将介绍如何使用 volatile 关键字以及它的作用。