在现代计算机中一般都有多CPU,每个CPU都有对应的寄存器,高速缓存,但是主存就一个
Java程序是运行在JVM上的,Java内存模型是一种符合模型规范,屏蔽各种硬件和操作系统的访问差异,保证了Java程序在各种平台对内存的访问都能保证效果一致的机制和规范.
如下图
因为现代计算机不止一个CPU,主存只有一个,所以出现并发问题
当程序在运行过程中,会将运算需要的数据从主存复制一份到cpu的高速缓存中,那么CPU进行计算时可以直接取和写,运算结束后,再将高速缓存中的数据刷新到主存中.
例如有一变量 i,两个线程,同样的操作,给这个i+1,线程1读取此变量到高速缓存1,这时候高速缓存中 i 的值为1,然后进行运算,i=2
然后同时,线程2也读取此变量,这个时候还没有将计算完的变量刷新到主存,所以读取到的为1,然后进行运算后,为2,这时候放回去,i就只为2,而不等于3了
内存模型一般指的是JDK 5开始使用的新的内存模型
JDK5开始,Java使用新的JSR-133内存模型,使用happens before的概念来阐述操作之间的内存可见性
在 JMM 中,如果一个操作的结果需要对另一个操作可见,那么这两个操作之间必须存在happens-before关系
并发需要保证原子性,可见性,有序性
线程的原子性可见性有序性:https://blog.csdn.net/qq_41806966/article/details/103393221
本文地址:https://blog.csdn.net/qq_41806966/article/details/107392747
如对本文有疑问, 点击进行留言回复!!
case when + forEach 实现多条件多值批量更新
这些令人喷饭的代码注释,最后一个让我笑出了声(今日份的快乐源泉)
网友评论