美团秋招内推啦!!缺前端!缺后端!


meituan到店事业群平台技术部,秋招火热进行中!
内推方式1:

点击链接看内推二维码,扫码投 简历   https://www.cnblogs.com/CATHY-MU/p/15102097.html

内推方式2:

登陆官网投递(  https://campus.meituan.com/ )填写内推码( OYkaHKQ)

平台技术部校招咨询qq群 821133476

乐观锁和悲观锁
悲观锁:读、写都加锁。默认每个资源都有很多线程争抢,获得了资源就先加上锁再操作,但是加锁和释放成本高。
乐观锁:读不加锁,写加锁。

cas
compare and swap
默认没有线程和自己争抢资源,先记下操作前的快照,操作完后来对比下资源是否被修改过,如果没人来过,就写入新值,否则重新执行刚才的操作。
这里存在aba的问题,即“虽然还是刚才存起来的值,但这段时间里,有人改过两次又改回原值”,这时就会有错误。
根据版本号判断可以解决这个问题。

java对象头
对象头包含markword、类型指针、数组长度三部分。
markword有:指向栈中锁记录的指针、偏向线程id、锁状态等信息。
通过markword内容,可以看出对象处于无锁还是偏向锁、轻量级锁、重量级锁。
多线程下synchronized的加锁就是对同一个对象头中markword中的变量进行cas操作。

偏向锁
很多时候一个加了锁的代码块自始至终都只有一个线程访问,此时用偏向锁,可以节省加锁解锁的开销。
当这个线程持有锁之后,只要没有线程来竞争这个锁,他将一直持有锁,每次执行加锁代码块块前后,只要看看markword里记录的“持有偏向锁的线程”是不是自己就行。
当发生竞争时,偏向锁会升级变成轻量级锁。

轻量级锁
线程a和b竞争对象的锁。
1.抢锁就是cas的改markword,谁改成功了,谁就抢到了。(把无锁的markword改成指向自己栈中锁记录的指针,旧的markword记在自己的栈帧里)
2.没有抢到锁的线程,自旋(重试)等着抢到锁的线程释放锁。所以轻量级锁适用于锁粒度小,很快就释放了场景,可以省下加锁解锁的开销。锁粒度太大的话,自旋很占cpu资源,不如用重量级锁。
3.如果自旋n次结束之后资源还是没有释放,轻量级锁就膨胀成重量级锁,这个线程挂起,接下来想竞争这个资源的线程,直接挂起。

10重量级锁

重量级锁

synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的,监视器锁本身依赖底层的操作系统的 Mutex Lock来实现。操作系统实现线程的切换需要从用户态切换到核心态,成本非常高。这种依赖于操作系统 Mutex Lock来实现的锁称为重量级锁。为了优化synchonized,引入了轻量级锁,偏向锁。


#美团##校招##秋招##内推#
全部评论

相关推荐

叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
码农索隆:这种hr,建议全中国推广
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务