关于两种锁的性能问题

关于两种锁的性能问题

Synchronized优化前底层是线程挂起所以性能比较差,但ReentrantLock底层也是线程挂起为什么性能比较好呢

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
大目 2021-01-11 16:27:10

性能开销不在于线程挂起,而在于是否经历了用户态-内核态的切换。


Synchronized优化之前,是通过操作系统的互斥量实现锁的,会导致用户态-内核态的切换,这块开销很大,所以性能较差。

  • 提问者 慕函数3599471 #1

    老师,那ReentrantLock锁挂起线程呢,会有上下文切换操作吗,如果有为什么会比Synchronized性能比较差

    2021-01-11 17:01:49
  • 大目 回复 提问者 慕函数3599471 #2

    有啊,不过它是通过线程排队实现的。
    线程切换并不是什么黑科技,线程本身也是个对象,你可以想象有个队列,然后取几个线程元素在消费。
    …………
    但这个切换,是java层面去做的,不是操作系统层面做的,所以开销比较小,看下aqs的源码就知道啦。

    2021-01-11 17:04:54
  • 提问者 慕函数3599471 回复 大目 #3

    我记得AQS操作线程好像是通过一个LockSupport工具类,具体实现可能我没有理解,谢谢老师解答

    2021-01-11 17:17:19
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师