以前一直说synchronize是一种重量级锁,因为以前synchronize是没有锁升级这个机制的,多个线程竞争锁时没有拿到锁的会直接进入阻塞状态,而后来引入了锁升级后,synchronize便没那么重了,具体可参加我的另一篇文章synchronize
synchronize的加锁是在对象头进行操作的,而Lock是基于AQS中的state进行的,每次进入锁就会使state+1,而在基于AQS的Lock中,竞争失败的线程不会立刻陷入阻塞,而是会加入同步队列进行一会的自旋操作,如果还无法获得锁才会进行阻塞。
线程的阻塞唤醒代价是很大的,如果一个频繁竞争的资源其运行时间也很短,使用Lock大部分通过自旋即可进行锁的获取,因此对于以前的synchronize失败就阻塞而言就轻了很多。但现在有了锁升级,这种情况下synchronize如果位于轻量级锁的状态下与Lock实际性能区别不大