Synchronized,final关键字的作用

 

Synchronized:

使用monitorenter和monitorexit指令实现的:

  • monitorenter指令是在编译后插入到同步代码块的开始位置,而monitorexit是插入到方法结束处和异常处
  • 每个monitorenter必须有对应的monitorexit与之配对
  • 任何对象都有一个monitor与之关联,当且一个monitor被持有后,它将处于锁定状态

并在 monitorenter 指令后的临界区最前存放一个获取屏障,并在 monitorexit 后面插入一个 释放屏障,在这两个屏障的保护下,还有锁的排他性下,使得在 synchronized 的临界区当中具有原子性。也因为这两个屏障的使用实现了有序性,获取屏障使得读线程只有在获得锁的情况下,才能够执行临界区的操作。释放屏障使得临界区的读写操作必须前于 monitorexit。

 

final:

在 final 之后曹汝一个 storestore 屏障,使得后面的无法与前面的写操作相互替换位置。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值