当synchronized方法执行完成时,是只将其修改的数据推送到主存,还是所有的成员变量,同样,当synchronized方法执行时,是只从主存中读取自己需要的数据,还是清除所有的成员变量?缓存中的成员变量并从主存中读取它们的值?例如
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执行。计算执行完毕后,threadA 会用 a 和 b 更新主存,还是会更新 a、b、c 和 d。在执行 getResult 之前,threadB 是否仅从主内存获取 b 和 c 的值,还是会清除缓存并获取所有成员变量 a、b、c 和 d 的值?
synchronized
确保您对数据有一致的看法。这意味着您将读取最新值,其他缓存也将获取最新值。缓存足够智能,可以通过特殊总线相互通信(JLS 不需要,但允许)。该总线意味着它不必接触主内存即可获得一致的视图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)