Java内存模型

四种内存屏障:
loadload:load1 loadload load2 该内存屏障使得load1对数据的装载操作先于load2以及后续的装载指令
loadstore:load1 loadstore store2 使得load1对数据的装载操作先于store2以及后续的存储指令
storestore:store1 storestore store2 使得store1对数据的存储先于store2以及后续的存储指令
storeload:store1 storeload load2 使得store1对数据的存储优先于后续的装载指令,是一个全能性的指令,要求该屏障之前的所有操作都完成之后才能进行后续的操作

volatile:在每个volatile写操作之前插入一个storestore指令
        在每个volatile写操作之后插入一个storeload指令
        在每个volatile读之后插入一个loadload
        在每个volatile读之后插入一个loadstore

happens-before原则:
    程序次序原则
    监视器锁规则:对一个锁的解锁,happens-before随后对这个锁的加锁
    volatile规则:对一个volatile变量的写happens-before随后对这个变量的读取
    传递规则:
    其他规则:如线程start,interrupt等

volatile内存语义:(1)可见性:对一个变量的读,总是能看到任意线程对这个变量最后的写入(2)禁止指令重排序:对volatile读写插入内存屏障禁止重排序。
synchronized内存语义:(1)实现线程间互斥执行:在同一个锁的临界区内的代码互斥执行(2)确保内存可见性:释放锁之前会将同步代码中写变量刷新到主内存,在获取锁时会将工作内存中的变量设为无效,必须从主内存中重新获取
final内存语义:(1)在对象引用为任意线程可见之前,对象的final域已经被正确初始化(2)读对象引用需要在读final域之前
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值