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规则都对应着底层的一系列重排序规则,我们不需要知道底层具体是怎么重排序的,相当于提供给我们一套更方便理解指令重排序的这么一套规则。                

    原文作者:buptyuhanwen
    原文地址: http://www.cnblogs.com/buptyuhanwen/p/9546695.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞