(1) 用法不一样。synchronized可以用于修饰方法,也可以用在代码块中。Lock需要指定起始和终点位置,一般放在try-finally结构中,try开始执行lock方法,finally中执行unlock方法。synchronized是托管给JVM执行的,Lock是通过代码执行的。
(2) 性能不一样。在资源竞争不激烈情况下,synchronized的性能比Lock好,而在资源竞争激烈时,synchronized的性能下降很快,而Lock基本保持不变。
锁机制不一样。synchronized获得锁和释放锁都是在块结构中,获取多个锁时必须以相反顺序释放,并且自动释放锁。Lock需要开发人员手动释放锁,并且放在finally中。