java内存模型

1. 原子性

对于32位系统来说,对long型的数据类型的读写不是原子性的,因为long有64位

2. 可见性

有的时候当一个CPU的一个线程更改了数据,另一个CPU的线程并不知道。

3. 有序性

因为指令是流水线执行的,有的时候造成不必要的停顿,因此为了能提高效率,就进行了指令重排。

工作内存和主内存

每个线程都有自己的工作内存,工作内存是主内存的一个副本。线程的所有的读写都在工作内存中不同的线程不能去访问对方的工作内存。

Volatile

volatile是一种轻量级的sychronized,它解决了可见性问题,在汇编中volatile中会加上lock字段,lock实现了三个功能

  1. 形成一道屏障,使得重排序的时候前面的不会排到后面去,后面的也不会排到前面去。
  2. 强制缓存的修改操作并立即写入主存
  3. 使其他CPU对应的缓存失效
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容