Java多线程实现基础(二)

Java内存模型

基本概念

1. 线程通信
   线程之间以何种方式进行消息传递
   共享内存 & 消息传递
   
2. 线程同步
   程序间用于控制不同线程间操作发生相对顺序的机制
   
   java是共享内存模型】采用的是隐式通信、显式修改
   
   jvm定义了线程和主内存(Main Memory)之间的关系:
   1) 线程之间的共享变量存储在主内存中
   2) 线程私有变量存储在私有本地内存 Local Memory中、
      本地内存是jvm的一个抽象概念、并非真实存在、涵盖缓存、缓冲区、寄存器及其它硬件及编译器优化
   Java同步原语(synchronize volatile  final)

指令重排

1. 编译器重排
   在不改变单线程语义的条件下、编译器可以重排指令的执行顺序
2. 指令重排 
   现代cpu采用了指令级并行技术、可以同时执行多条指令、若无数据依赖、
   处理器可以改变机器指令的执行顺序
3. 内存系统的重排
   由于处理器采用缓存和读写缓冲区、使得加载和存储操作看上去是乱序的、
   可能在乱序执行

jvm 指令执行

未使用同步的程序在jvm中的执行基本无序、
1. jvm不保证单线程内的操作会按照程序代码顺序执行、临界区指令重排
2. jvm不保证所有线程看到的执行顺序一致
3. jvm不保证64位的long、double类型写操作具有原子性

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容