引擎盖下的java中的易失性关键字

Ron*_*dur 8 java multithreading volatile

我和老师就volatilejava中的关键字进行了一些争论.说变量被声明为volatile:

该变量的值永远不会被线程本地缓存:所有读取和写入将直接进入"主存储器".

我老师的意见是:

volatile关键字保证变量的值将保存在主内存中.

有人能解决我们的冲突吗?谢谢!

Jes*_*per 9

对于关键字的确切含义volatile,请查看Java语言规范以查看官方含义.

JLS第8.3.1.4段解释了什么volatile意思:

字段可以声明为volatile,在这种情况下,Java Memory Model可以确保所有线程都看到变量的一致值(第17.4节).

第17.4节解释了Java内存模型.内存模型为您提供有关程序中每个语句之后数据发生情况的某些保证.

如果你仔细研究,你会发现这volatile意味着如果你写一个volatile变量,你可以保证其他线程会看到写的内容.故意没有具体说明如何在实践中实施.它可以通过强制写入主内存来实现,但JVM实现者可以自由选择不同的,可能更有效的机制.

所以,严格来说,你的老师是对的.它并不一定意味着将值写入主存储器; 虽然在实践中可能就是这种情况 - 但这取决于特定的JVM实现.