java并发编程的艺术【三】-【三】内存语义

Volatile的内存语义

Volatile的内存语义
可见性:对于一个volatile变量的读,总能看见任意线程对volatile变量最后的写。
原子性:对于任意单个volatile变量的读写具有原子性,但对于符合操作不具有原子性。

当写volatile变量时,jvm会把线程中对用的本地存贮刷新到内存。
读取volatile变量时,jvm会把本地存贮的值置为无效,读取内存中的值。

Volatile内存语义的实现
StoreStore屏障 volatile写操作 StoreLoad屏障
Volatile写操作 LoadLoad屏障 LoadStore屏障

锁的内存语义

锁的内存语义
释放锁的时候,jvm把线程本地存贮刷新到内存中。
获取锁的时候,jvm会把线程对应的本地内存置为无效,而迫使被监视器保护的临界区代码必须从主内存中读取共享变量。

锁内存语义的实现
1>利用volatile变量的读写内存语义
2>利用cas所附带的volatile读和volatile写的内存语义。

ps:cas同时具有volatile读-写的内存语义。

Final域的内存语义

对于final域,编译器和处理器要遵守两个重排序规则。
1,对于构造函数对final域的写入,在随后这个被构造的对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
2,初次读取一个包含final域的对象的引用,于随后初次读取这个final域,这两个操作之间不能重排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注网赚的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值