java存储模型

编译器生成指令的次序,可以不同于源代码所暗示的“显然”的版本,而且编译器还会把变量存储在
寄存器,而不是内存中;处理器可以乱序或者并行地执行指令;缓存会改变写入提交到主内存的变
量的次序;最后,存储在处理器本地缓存中的值,对于其他处理器并不可见。

重排序

java存储模型的定义是通过动作的形式进行描述的,所谓动作,包括变量的读和写、监视器加锁和
释放锁、线程的启动和拼接。

haddens-before的法则包括:
程序次序法则:线程中的每个动作A都haddens-before于该线程中的每一个动作B。
监视器锁法则:对一个监视器锁的解锁happens-before于每一个后续对同一监视器锁的加锁。
volatile变量法则:对volatile域的写入操作happens-before于每一个后续对同一域的读操作。
线程启动法则:在一个线程里,对Thread.start的调用会happens-before于每一个启动线程中的动作。
线程终结法则:线程中的任何动作都happens-before于其他线程检测到这个线程已经终结、或者从
Thread.join调用中成功返回,或者Thread.isAlive返回false.
中断法则:一个线程调用领一个线程的interrupt happens-before于被中断的线程发现中断。
终结法则:一个对象的构造函数的结束happens-before于这个对象finalizer的开始。
传递性:如果A haddens-before于B ,并且B happens-before于C,则A happens-before于C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值