美文网首页
java内存模型

java内存模型

作者: xiechuanfang | 来源:发表于2016-05-18 15:32 被阅读0次

    引用: Java内存模型

    java内存模型
    线程栈:本地变量,
    堆:对象,对象成员变量,静态成员变量

    如果两个线程同时调用同一个对象的同一个方法,她们将会都访问这个对象的成员变量,但是每一个线程都拥有这个本地变量的私有拷贝。

    java内存模型和硬件内存架构之间存在差异。硬件内存架构没有区分线程栈和堆。对于硬件,所有的线程栈和堆都
    分部在主内存中,部分线程和堆可能存在cpu缓存中和cpu内部的寄存器中。当对象和变量被存放在计算机中各种不同的内存区域的时候,就可能
    出现如下两个方面问题:
    1,线程对共享变量修改的可见性:多个线程在没有正确使用volatile声明或者同步的情况下共享一个对象,一个线程更新这个共享对象
    可能对其他线程来说是不可见的。
    解决方法:volatile关键字
    保证直接从主存中读取一个变量,如果这个变量被修改后,总是会被写回到主存中去。

    2,当读,写和检查共享变量时出现race conditions:多个线程在共享变量上更新变量
    解决方法: 使用java同步块。一个同步块可以保证在同一时刻仅有一个线程进入
    代码临界区。同步块还可以保证代码块中的所有被访问的变量将会从主存中读入,当线程退出代码块时候,所有被更新的变量都会被
    刷新回主存,不管这个变量是否被声明为volatile

    相关文章

      网友评论

          本文标题:java内存模型

          本文链接:https://www.haomeiwen.com/subject/tsswrttx.html