synchronized和ReentrantLock的区别

发布时间 2023-07-15 18:48:39作者: 时间羚羊

用法:

synchronized修饰代码块或者方法,不需要手动释放,默认非公平

ReentrantLock需要手动调用,手动释放,能够控制公平机制,能够尝试获取和超时获取锁,能更好的控制锁行为,在需要通过线程提高性能的场景中,能比较好的操控

 

基本原理:

synchronized是靠管程(monitor)实现的,有锁升级,默认从轻量级锁开始升级,偏向锁需要添加启动参数(个人认为这玩意比较鸡肋),一旦升级后续线程都会使用重量级锁,不会降级

ReentrantLock是靠AQS框架实现的,每次都会CAS,然后才会升级