并发编程(2)- Synchronize优化

并发编程(2)- Synchronize优化字

本篇将介绍Synchronize关键字,Synchronize的优化,偏向锁、轻量级锁等。

由于某些数据存在共享性,在多线程情况下,多线程对同一条数据同时进行修改会造成结果的不确定性,为了保证结果的确定性,则需要控制在多线程修改共享数据的时候,对数据进行锁定,数据修改完成后再释放锁,这时其他的线程可以对改共享数据进行修改,这体现了资源访问的互斥性。在资源被某个线程占用之后,直到该线程释放锁,整个过程体现了数据操作的原子性(加锁到释放锁的过程是一个整体操作,在执行过程中不允许被其他线程中断)。另外一个特性就是可见性,这个在上一章volatile的时候已经解释过。简单说就是一个共享变量在被一个线程修改之后,其他线程也应该能发现变量的变化。

jdk1.6之前Synchronize的实现同步时通过内部监视器来实现的,这个监视器的实现依赖于操作系统的Mutex(操作系统课肯定有讲过的)来实现。Mutex是操作系统维度的也就意味着在进行加锁解锁的操作需要操作系统来实现,需要更多的状态转换开销以及等待时间。这也是JDK1.6之前Synchronize十分笨重的原因,为了提高性能,引入了“偏向锁”、“轻量级锁”,“自旋锁”等,下面直接从锁的膨胀过程介绍它们。

java中将锁的信息存在对象头中,对象头中存储了对象哈希码、分代年龄、锁标志位等信息。下图中展示了对象头的数据结构。
在这里插入图片描述
对象头的数据结构中包含了对各种锁的标志位以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值