zoukankan      html  css  js  c++  java
  • java基础---多线程---java内存模型

    ===java内存模型的作用。
    java内存模型定义了线程和线程和线程和主内存之间的抽象关系。每个线程有自己的内存区域,存的是从主内存复制过来的变量副本,他是一个抽象概念。
    线程之间通信会通过主内存,将修改的数据刷新到主内存去,其他线程就能够获取到。
     
     
    ===考虑到内存模型避不开指令重排序
    为了提升性能,编译器和处理器都会做指令重排序。
     
    指令重排序在单cpu和单线程条件下遵循一系列规则:
    1.如果有数据依赖关系的比如先写再读,先读再写啥的就不做重排序;控制依赖关系的时候,会先缓存计算结果再等条件判断。
    a = 1;
    b = 1;
    bool = true;
    c = a + b;
     
    if (bool) {
        c = a * a;
    }
    2.保证结果不改变情况下重排序。
    指令重排序在多线程情况下如果没做同步可能出现内存可见性问题。
     
    happens before
    java提供给程序员一种便于操作重排序的规则,就是happens before规则。他是一种表示可见性的规则,比如A happens before B,表示A的执行结果对B是可见的,但是没有要求A在B之前执行。
    每个happens before规则都对应着底层的一系列重排序规则,我们不需要知道底层具体是怎么重排序的,相当于提供给我们一套更方便理解指令重排序的这么一套规则。
     
     
     
     
     
     
     
     
  • 相关阅读:
    架构师时间~白话OAuth2
    vue前端各种问题
    windows命令行导入sql
    正则表达式概述
    XPath语法 在C#中使用XPath示例
    面试宝典
    Repository,UnitOfWork,DbContext(1)
    EF Code First:实体映射,数据迁移,重构(1)
    表单常用的正则表达式
    Lambda表达式
  • 原文地址:https://www.cnblogs.com/buptyuhanwen/p/9546695.html
Copyright © 2011-2022 走看看