编程语言
首页 > 编程语言> > java – 同步数据读/写主存储器

java – 同步数据读/写主存储器

作者:互联网

当一个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执行.在执行compute之后,threadA会用a和b更新主内存,还是会更新a,b,c和d.在执行getResult之前,threadB只从主内存中获取b和c的值,还是清除缓存并获取所有成员变量a,b,c和d的值?

解决方法:

synchronized确保您拥有一致的数据视图.这意味着您将读取最新值,其他缓存将获得最新值.缓存非常智能,可以通过特殊总线相互通信(不是JLS要求的,但允许的话).这种总线意味着它不需要触摸主存储器来获得一致的视图.

标签:java,caching,multithreading,synchronization,java-memory-model
来源: https://codeday.me/bug/20190530/1182260.html