有事没事领个红包

java 内存模型

1 平台的内存模型

在共享内存的多处理器体系架构中,每个处理器都拥有自己的缓存,并且定期的与主内存进行协调。

串行一致性:程序只存在唯一的执行顺序,而不考虑这些操作在何种处理器上执行,并且在每次读取变量时,都能获取执行序列中(任何处理器)最近一次写入该变量的值。

在现代支持共享内存的多处理器中,当跨线程共享数据时,会出现奇怪的情况,在java中需要使用适当的同步方法。在底层是使用内存栅栏来实现。

 

2 Happens-Before 规则

程序顺序规则:如果程序中 操作A 在操作B 之前,那么线程中 操作A 将在 操作B 之前执行。

监视器锁规则:在监视器锁上的解锁操作必须在同一个监视器锁上的加锁操作之前执行。

volatile 变量:对 volatile 变量的写入操作必须在对该变量的读操作之前执行

线程启动规则:在线程上对 Thread.Start 的调用必须在该线程中执行任何操作之前执行。

线程结束规则:线程中的任何操作都必须在其他线程检测到该线程已经结束之前执行,或者从 Thread.Join 中返回,或者调用 Thread.isAlive 时返回false

传递性:如果 操作A 在 操作B 之前,并且 操作B 在 操作C 之前执行,那么 操作A 必须在 操作C 之前执行。

 

3 在 java 内存模型中, final 域能确保初始化过程的安全性,从而可以不受限制的访问不可变对象。

posted @   crazyCodeLove  阅读(298)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示