同期メソッドが完了すると、それによって変更されたデータのみがメイン メモリにプッシュされますか、それともすべてのメンバー変数がプッシュされますか?キャッシュ内のメンバー変数とその値をメイン メモリから読み取りますか? 例えば
public class SharedData
{
int a; int b; int c; int d;
public SharedData()
{
a = b = c = d = 10;
}
public synchronized void compute()
{
a = b * 20;
b = a + 10;
}
public synchronized int getResult()
{
return b*c;
}
}
上記のコードでは、compute が threadA によって実行され、getResult が threadB によって実行されると想定しています。compute の実行後、threadA はメイン メモリを a と b で更新するか、a、b、c と d を更新します。getResult を実行する前に、threadB はメイン メモリから b と c の値のみを取得しますか、それともキャッシュをクリアしてすべてのメンバー変数 a、b、c、および d の値をフェッチしますか?