• 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规则都对应着底层的一系列重排序规则,我们不需要知道底层具体是怎么重排序的,相当于提供给我们一套更方便理解指令重排序的这么一套规则。
     
     
     
     
     
     
     
     
  • 相关阅读:
    Scala-函数
    Scala--循环
    scala(一)
    拦截器filter
    Ajax实现分页二
    并发1
    泛型
    协议protocol
    结构体structure
    类的继承
  • 原文地址:https://www.cnblogs.com/buptyuhanwen/p/9546695.html
Copyright © 2020-2023  润新知