[英]Instance variable (Object ,not primitive) caching in Java Thread
Java線程是否緩存Instance變量,或者將在所有線程之間共享它?
Class CachedObject{
MyClass object1 = new MyClass();
public void changeValue(int i){
object1.setValue(i);
}
}
讓我們假設, changeValue
方法將被多個線程訪問,然后object1
將被緩存在每個線程緩存中或將被共享?
我了解synchronized
,如果我在方法上使用了synchronized
,一切都會好的,但是我在這里特別詢問線程緩存。 我知道局部變量被緩存在線程緩存中,但是我對實例變量感到困惑。 謝謝..
線程本身不會緩存任何內容。
但是線程根據CPU線程模型在不同的內存數據中進行讀寫操作。
因此,可能需要與線程之間的主內存進行同步。
在您的情況下,如果您創建一個在多個線程之間共享的CachedObject
的單個實例, CachedObject
這種方式實現setValue()
,其他線程的新object1
狀態可能不會更新/可見:
public void setValue(int i){
this.value = i;
}
因為它為int
字段分配了一個新值,而沒有任何僅對當前線程可見的同步。
但是通過這些方式,您將不會遇到問題:
private int volatile value;
public void setValue(int i){
this.value = i;
}
要么 :
public void setValue(int i){
synchronized(this){
this.value = i;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.