synchronized关键字的底层原理(2)
导读:synchronized关键字的底层原理,思考:为什么会出现两个monitorexit 有两个monitorexit的原因, 第二个monitorexit是为了防止锁住的代码抛异常后不能及时释放锁 在使用了synchornized代码块时需要
synchronized关键字的底层原理
思考:为什么会出现两个monitorexit
有两个monitorexit的原因,第二个monitorexit是为了防止锁住的代码抛异常后不能及时释放锁在使用了synchornized代码块时需要指定一个对象,所以synchornized也被称为对象锁
monitor主要就是跟这个对象产生关联,如下图

Monitor内部具体的存储结构:
- Owner:存储当前获取锁的线程的,只能有一个线程可以获取
- EntryList:关联没有抢到锁的线程,处于Blocked状态的线程
- WaitSet:关联调用了wait方法的线程,处于Waiting状态的线程
具体的流程:
- 代码进入synchorized代码块,先让lock(对象锁)关联的monitor,然后判断Owner是否有线程持有
- 如果没有线程持有,则让当前线程持有,表示该线程获取锁成功
- 如果有线程持有,则让当前线程进入entryList进行阻塞,如果Owner持有的线程已经释放了锁,在EntryList中的线程去竞争锁的持有权(非公平)
- 如果代码块中调用了wait()方法,则会进去WaitSet中进行等待
3.面试题
面试官:synchronized关键字的底层原理?
- Synchronized【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】
- 它的底层由monitor实现的,monitor是jvm级别的对象( C++实现),线程获得锁需要使用对象(锁)关联monitor
- 在monitor内部有三个属性,分别是owner、entrylist、waitset
- 其中owner是关联的获得锁的线程,并且只能关联一个线程;entrylist关联的是处于阻塞状态的线程;waitset关联的是处于Waiting状态的线程
上述分享的synchronized关键字的底层原理的IT小经验,希望能为您在生活中带来帮助!
相关阅读
-
Git基础入门教程:从零开始掌握版本控制
你是不是想知道Git基础入门教程方面的介绍,一起来了解了解吧。 Git是一个分布式版本控制系统,它在软件开发中被广泛应用,用于跟踪和管理代码的版本更改。 无论你是开发人员,还是想学
-
做网页的素材有哪些 网页设计制作网站
关于做网页的素材有哪些和网页设计制作网站的电脑小知识,接下来分享详细内容。 很多小伙伴们在准备做网站的时候通常是先找网站建设公司洽谈需求然后再根据服务商的要求提供对应素材
-
mysql数据库基础知识是什么 数据库零基础入门教学
今日小编为你讲解mysql数据库基础知识是什么和数据库零基础入门教学IT技巧方面的经验,请看下面详细的介绍。 MYSQL数据库简介 1、数据库就是存储数据的仓库,其本质是一个文件系统。数据
-
什么是TCP/IP协议? TCP/IP协议包含哪几层?
跟大家聊一聊什么是TCP/IP协议的相关介绍,具体介绍如下: TCP/IP协议是Transmission Control Protocol/Internet Protocol的缩写,意为传输控制协议/因特网互联协议。 它是一种用于计算机网络通信的协议族


