当一个同步方法完成后,是只把它修改过的数据推送到主存,还是把所有的成员变量都推送到主存,同理,同步方法执行时,是只从主存中读取它需要的数据还是清空所有的数据?缓存中的成员变量并从主存中读取它们的值?例如
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;
}
}
在上面的代码中,假设计算由线程A 执行,getResult 由线程B 执行。在执行计算之后,线程A 将使用 a 和 b 更新主内存还是更新 a、b、c 和 d。在执行 getResult 之前,threadB 将只从主内存中获取 b 和 c 的值,还是会清除缓存并获取所有成员变量 a、b、c 和 d 的值?