zoukankan      html  css  js  c++  java
  • java 内存模型

    1 平台的内存模型

    在共享内存的多处理器体系架构中,每个处理器都拥有自己的缓存,并且定期的与主内存进行协调。

    串行一致性:程序只存在唯一的执行顺序,而不考虑这些操作在何种处理器上执行,并且在每次读取变量时,都能获取执行序列中(任何处理器)最近一次写入该变量的值。

    在现代支持共享内存的多处理器中,当跨线程共享数据时,会出现奇怪的情况,在java中需要使用适当的同步方法。在底层是使用内存栅栏来实现。

    2 Happens-Before 规则

    程序顺序规则:如果程序中 操作A 在操作B 之前,那么线程中 操作A 将在 操作B 之前执行。

    监视器锁规则:在监视器锁上的解锁操作必须在同一个监视器锁上的加锁操作之前执行。

    volatile 变量:对 volatile 变量的写入操作必须在对该变量的读操作之前执行

    线程启动规则:在线程上对 Thread.Start 的调用必须在该线程中执行任何操作之前执行。

    线程结束规则:线程中的任何操作都必须在其他线程检测到该线程已经结束之前执行,或者从 Thread.Join 中返回,或者调用 Thread.isAlive 时返回false

    传递性:如果 操作A 在 操作B 之前,并且 操作B 在 操作C 之前执行,那么 操作A 必须在 操作C 之前执行。

    3 在 java 内存模型中, final 域能确保初始化过程的安全性,从而可以不受限制的访问不可变对象。

  • 相关阅读:
    程序员的九重境界,你是第几重?
    一个常用的正则表达验证类(转载)
    学习程序设计的态度
    科技期刊学术不端文献检测系统(转载)
    用GridView设计固定行数的入库单报表
    JavaScript技巧集
    线程的概念
    java实验三 类的继承与多态
    常见的网络攻击手段及防御方法
    类和对象的概念(转载)
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/10108459.html
Copyright © 2011-2022 走看看