Java线程是否缓存Instance变量,或者它将在所有线程之间共享?
Class CachedObject{
MyClass object1 = new MyClass();
public void changeValue(int i){
object1.setValue(i);
}
}
假设,changeValue
方法将被多个线程访问,然后object1
将被缓存在每个线程缓存中或将被共享?
我了解synchronized
,如果我在方法上使用了synchronized
,一切都会好起来的,但是我在这里特别询问线程缓存。
我知道局部变量被缓存在线程缓存中,但是我对实例变量感到困惑。
谢谢。
答案 0 :(得分:0)
线程本身不会缓存任何内容。
但是线程根据CPU线程模型在不同的内存数据中进行读写操作。
因此,可能需要与线程之间的主内存进行同步。
在您的情况下,如果您创建一个UserComponent
的实例,该实例在多个线程之间共享,则以这种方式实现的router-outlet
可能不会为其他线程更新/显示新的CachedObject
状态:
object1
因为它为setValue()
字段分配了一个新值,而没有任何仅对当前线程可见的同步。
但是通过这些方式,您不会遇到问题:
public void setValue(int i){
this.value = i;
}
或:
int