首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
讲一下非公平锁和公平锁在reetrantlock里的实现。
[问答题]
请讲一下非公平锁和公平锁在reetrantlock里的实现过程是怎样的。
添加笔记
求解答(0)
邀请回答
收藏(35)
分享
纠错
4个回答
添加回答
2
枫三夏
非公平锁: 当线程争夺锁的过程中,会先进行一次CAS尝试获取锁,若失败,则进入acquire(1)函数,进行一次tryAcquire再次尝试获取锁,若再次失败,那么就通过addWaiter将当前线程封装成node结点加入到Sync队列,这时候该线程只能乖乖等前面的线程执行完再轮到自己了。
公平锁: 当线程在获取锁的时候,会先判断Sync队列中是否有在等待获取资源的线程。若没有,则尝试获取锁,若有,那么就那么就通过addWaiter将当前线程封装成node结点加入到Sync队列中。
发表于 2019-02-19 15:16:35
回复(2)
0
宋铁松
非公平锁: 当线程争夺锁的过程中,会先进行一次CAS尝试获取锁,若失败,则进入acquire(1)函数,进行一次tryAcquire再次尝试获取锁,若再次失败,那么就通过addWaiter将当前线程封装成node结点加入到Sync队列,这时候该线程只能乖乖等前面的线程执行完再轮到自己了。 公平锁: 当线程在获取锁的时候,会先判断Sync队列中是否有在等待获取资源的线程。若没有,则尝试获取锁,若有,那么就那么就通过addWaiter将当前线程封装成node结点加入到Sync队列中。
发表于 2020-07-14 14:17:55
回复(0)
0
牛牛飞
BeanFactory:
是spring中比较原始,比较古老的Factory。因为比较古老,所以BeanFactory无法支持spring插件。例如:AOP、web应用等功能。
AppliactionContext:
是BeanFactory的子类,基本上代替了BeanFactory的工作。以一种更面向框架的工作方式以及对上下文进行分层和实现继承,并在这个基础上对功能进行扩展:
①MessageSource,提供国际化的消息访问。
②资源访问:URL和文件等。
③事件传递。
④Bean的自动装配。
⑤各种不同的应用层的Context实现。
区别:
①如果使用ApplicationContext,如果配置的Bean是Singleton单例,那么不管你有没有或想不想用它,它都会被实例化。好处是可以预先加载,坏处是浪费内存。
②BeanFactory,当使用BeanFactory实例化对象时,配置的Bean不会被马上实例化(懒加载),而是等到你使用bean的时候才会被实例化。好处是节约内存,坏处是速度比较慢。多用于移动设备的开发。
③没有特殊要求的情况下,应该使用ApplicationContext完成。因为BeanFactory能完成的事情,ApplicationContext都能完成,并且提供了更加丰富的功能
发表于 2020-05-28 21:37:10
回复(1)
0
江畔8670
非公平锁: 当线程争夺锁的过程中,会先进行一次CAS尝试获取锁,若失败,则进入acquire(1)函数,进行一次tryAcquire再次尝试获取锁,若再次失败,那么就通过addWaiter将当前线程封装成node结点加入到Sync队列,这时候该线程只能乖乖等前面的线程执行完再轮到自己了。 公平锁: 当线程在获取锁的时候,会先判断Sync队列中是否有在等待获取资源的线程。若没有,则尝试获取锁,若有,那么就那么就通过addWaiter将当前线程封装成node结点加入到Sync队列中。
发表于 2019-05-02 12:10:42
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Java
Java工程师
上传者:
小小
难度:
4条回答
35收藏
2178浏览
热门推荐
相关试题
数据链路层滑动窗口机制中发送窗口(...
网络基础
评论
(1)
有关linux线程的描述,正确的是...
京东
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
PHP工程师
2018
评论
(1)
用一种动物介绍你自己
通用能力
评论
(1)
对于小红书,创作者和粉丝之间互相不...
需求分析
评论
(1)
请你说几个海量数据存储常见问题以及...
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题