大家好,这里是淇妙小屋,一个分享技术,分享生活的博主
后续会发布更多MySQL,Redis,并发,JVM,分布式等面试热点知识,以及Java学习路线,面试重点,职业规划,面经等相关博客
转载请标明出处!
为了保证并发编程的特性不被破坏,提供了以下几种模型
顺序一致性模型可以保证并发编程的特性不被破坏,为多线程程序提供了极强的 内存一致性保证
通过加锁实现线程A和线程B的同步
虽然未同步,操作的执行整体上无序,但是两个线程都能看到执行顺序(因为顺序一致性模型保证每个线程的操作对其他线程立即可见)
不会出现内存可见性问题
JMM通过限制 编译器和处理器的重排序来提供内存可见性保证
JMM保证正确同步的多线程程序在任意的处理器平台上的执行具有 **顺序一致性(程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同)**
JMM为其提供最小安全性保障:线程执行时读取到的值,要么是之前某个线程写入的值,要么是默认值
JMM该程序的执行结果与其在数据一致性模型中的执行结果一致
规则
JMM要求线程之间的通信必须经过主内存
如果线程A与线程B之间想要通信,那么需要经过2个步骤
内存屏障的类型
屏障类型 | 指令示例 | 说明 |
---|---|---|
LoadLoad Barriers | Load1; LoadLoad; Load2 | 禁止指令重排序,Load1一定先于Load2 |
StoreStore Barriers | Store1; StoreStore; Store2 | 禁止指令重排序,store1一定先于store2; store1写的数据会立刻同步到主内存中,对所有线程可见 |
LoadStore Barriers | Load1; LoadStore; Store2 | 禁止指令重排序,Load1一定先于Store2 |
StoreLoad Barriers | Store1; StoreLoad; Load2 | 禁止指令重排序,Store一定先于Load2 ; store1写的数据会立刻同步到主内存中,对所有线程可见 |
StoreLoad Barriers是一个全能型屏障,具有其他3个屏障的效果,但是开销高(因为要把缓冲区中的数据刷新到内存中)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。