多线程之Synchronized关键字

概述

synchronized作为一把重量级锁,效率是偏低的,因为需要惊动操作系统大佬。底层使用的是CAS技术实现,再到最底层即汇编程序就一个指令实现:lock cmpxchg。

CAS实现原理

CAS全称:compare and exchange。如下图所示,使用while循环读取内存的值E,计算结果值V,比较E和当前新值N是否相等,如何相等,更新内存的值为V,退出。如果不相等,重新读取E值,继续循环。

ABA问题:在线程往内存中返回新值的过程中,有可能另外一个线程把原来的A值改为了B,然后又把B改回了A,另外一个线程并不知道这个值原来被改过,如果另外一个线程知道值被改过它很在乎,那问题就很大了。这个过程就称为大名鼎鼎的ABA问题。如果解决呢,加个版本号,version。

new出一个对象时,JVM的内存布局

分为四个部分:mark word(对象头),class point(类指向),变量,字节数对齐(被8整除不需要补齐)。

mark word主要记录了锁信息。


锁升级过程

下图为所升级的具体过程。偏向锁==》自旋锁==》重量级锁

四种锁:无状态锁,轻量级锁,偏向锁,重量级锁。

什么是偏向锁?

偏向于第一个进来的线程持有该锁。

偏向锁默认在对象new出来6秒后启动,为什么呢?

因为如果明知道会有多个线程争抢这个锁,为什么还要启动偏向锁呢?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值