synchronize和Lock区别

以前一直说synchronize是一种重量级锁,因为以前synchronize是没有锁升级这个机制的,多个线程竞争锁时没有拿到锁的会直接进入阻塞状态,而后来引入了锁升级后,synchronize便没那么重了,具体可参加我的另一篇文章synchronize

synchronize的加锁是在对象头进行操作的,而Lock是基于AQS中的state进行的,每次进入锁就会使state+1,而在基于AQS的Lock中,竞争失败的线程不会立刻陷入阻塞,而是会加入同步队列进行一会的自旋操作,如果还无法获得锁才会进行阻塞。

线程的阻塞唤醒代价是很大的,如果一个频繁竞争的资源其运行时间也很短,使用Lock大部分通过自旋即可进行锁的获取,因此对于以前的synchronize失败就阻塞而言就轻了很多。但现在有了锁升级,这种情况下synchronize如果位于轻量级锁的状态下与Lock实际性能区别不大

发布了98 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Mutou_ren/article/details/103752208