【发布时间】:2012-07-28 20:05:31
【问题描述】:
当一个同步方法完成时,是只把它修改过的数据推送到主存,还是把所有的成员变量都推送到主存,同理,一个同步方法执行时,是只从主存中读取它需要的数据,还是只从主存中读取?清除缓存中的所有成员变量并从主存中读取它们的值?例如
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 的值?
【问题讨论】:
标签: java multithreading caching synchronization java-memory-model