如果我有多个线程访问同一个全局变量,则每个线程都可以缓存此变量的值,并从现在开始访问此缓存副本。我可以使用volatile
来防止这种情况发生,例如:
volatile int i = 123;
我的问题是:这种行为叫什么(每个线程创建自己的变量“副本”的行为)?
答案 0 :(得分:2)
您可以将其称为代码优化,cpu优化,编译器优化。使用volatile还可以提供发生之前和发生之后的保证。
注意:此优化可以由javac
,JIT
或CPU完成。
答案 1 :(得分:1)
实际上,volatile用于表示变量的值将被不同的线程修改。
声明一个易变的Java变量意味着:
此变量的值永远不会在线程本地缓存:所有读取和写入将直接进入“主存储器”;
对变量的访问就好像它被包含在同步块中一样,自身同步。