volatile解决的行为叫什么?

时间:2015-06-18 08:15:14

标签: java multithreading

如果我有多个线程访问同一个全局变量,则每个线程都可以缓存此变量的值,并从现在开始访问此缓存副本。我可以使用volatile来防止这种情况发生,例如:

volatile int i = 123;

我的问题是:这种行为叫什么(每个线程创建自己的变量“副本”的行为)?

2 个答案:

答案 0 :(得分:2)

您可以将其称为代码优化,cpu优化,编译器优化。使用volatile还可以提供发生之前和发生之后的保证。

注意:此优化可以由javacJIT或CPU完成。

答案 1 :(得分:1)

实际上,volatile用于表示变量的值将被不同的线程修改。

声明一个易变的Java变量意味着:

此变量的值永远不会在线程本地缓存:所有读取和写入将直接进入“主存储器”;

对变量的访问就好像它被包含在同步块中一样,自身同步。