Java内存模型
内容纲要
Java内存模型
- 是一组规范,规范了java与cpu内存之间的一系列转换关系,来帮助程序员更简单的开发
- java内存模型更重要的是可见性,重排序和原子性
- 可见性
- 重排序,深入到java指令部分
- 原子性(那些是原子性)
为什么会有可见性问题
每个线程运行的过程中都会有自己的一个缓存层,当数据刷新后,当前核心的缓存层则会等待时机将改变后的值刷会到主存,但是等待时机的时候其他核心(线程)读取主存中还没未被刷新的值的时候,则会读取到以前的值,造成程序可见性风险
解决方案
主内存和本地内存
主内存和本地内存看的关系
- JMM有以下规定
- 所有的变量都存储在主内存中,同时每个线程也有自己独立的工作内存
工作内存中的变量内容是主内存中的拷贝 - 线程不能直接读写主内存中的变量,而是只能操作自己工作内存中的变量
然后再同步到主内存中 - 主内存是多个线程共享的,但线程间不共享工作内存,如果线程间需要通
信,必须借助主内存中转来完成
- 所有的共享变量存在于主内存中,每个线程有自己的本地内存,而且线
程读写共享数据也是通过本地内存交换的,所以才导致了可见性问题。
共有 0 条评论