浅谈锁机制

浅谈锁机制

什么是锁

在并发环境下,多个线程对同一资源进行争夺,为了管理这个秩序,就诞生了锁机制。

先浅谈一下线程的生命周期

首先就是初始阶段,线程new出来了,开始进入runnable状态,在runnable状态,所需要使用的资源被其他资源占用并上了锁,这个时候就进入到了休眠的阻塞状态(block),然后休眠状态下,调用了wait方法,或者在线程执行过程中,调用了B.join(),就会进入休眠的等待状态。在休眠状态,会等待这个可用资源的出现,出现了就会进入这个runnable状态,交给操作系统去等待cpu的分配执行。执行完或者异常就进入timenited,执行结束。

再浅谈一下java的对象锁

在Java对象中,每一个对象都有着一把对象锁。对象分为,对象头(mark word + class point)+对象体(存放方法,属性等)+对象尾(补充位,无其他作用)。对象头的mark word 标记着对象的各种锁,具体如图。
在这里插入图片描述

谈谈锁的升级

新建一个对象时,再禁用偏向锁或者在偏向锁的延迟时间内,对象锁标记为无锁001。超过偏向加载时间就会标记为偏向锁101,这个时候该对象就会对调用他的这个A线程进行标记,在mark word中存放该A线程id以及有效时间戳,该A线程在下次调用资源时可用直接调用。如果另外的B线程来调用这个资源,该对象就会根据之前存的A线程id去寻找这个A线程,如果这个A线程不在了,那么就将之前的A线程id改存为当前的这个B线程id;如果之前的A线程还存活,那么就说明本资源存在竞争,同时,锁升级为轻量级锁00,这个时候如果A线程过来也要使用该资源了,就会自旋(cpu空转)等待B线程的使用,B使用结束了,A就可以调用。如果超过这个自旋时间,那锁会再次升级为重量级锁10。
在这里插入图片描述
简单写写,以上请阅读时带有怀疑的态度,加上自己的思考去理解锁机制

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值