Java线程是否缓存Instance变量,还是在所有线程之间共享?
Class CachedObject{
MyClass object1 = new MyClass();
public void changeValue(int i){
object1.setValue(i);
}
}
让我们假设, changeValue
方法将被多个线程访问,然后 object1
将被缓存在每个线程缓存中还是会被共享?
我知道 synchronized
,如果我在方法上使用 synchronized
一切都会好的,但我特别询问这里的线程缓存 . 我知道局部变量缓存在线程缓存中,但我对Instance变量感到困惑 . 谢谢..
1 回答
线程不会自己缓存任何东西 .
但是线程在根据CPU线程模型读/写的不同内存数据中读/写 .
因此,可能需要与线程之间的主存储器同步 .
在您的情况下,如果您创建在多个线程之间共享的
CachedObject
的单个实例,则如果以这种方式实现setValue()
,则其他线程的新object1
状态可能不会更新/可见:因为它为
int
字段分配了一个新值,而没有任何同步,只有当前线程才可见 .但是在这些方面你不会有这个问题:
要么 :