a、 synchronized是Java内置关键字,而在JVM层面,Lock是个Java类;
b、 synchronized 可以给类、方法、代码块加上锁;但是lock 只能给代码块加锁。
c、 synchronized 不需要手动获取锁和释放锁,使用很简单,一旦程序发生异常就会自动释放锁,不会造成死锁;而 lock 则是需要自己加锁和释放锁,如果不能正确使用,没有 使用unLock()去释放锁资源就会造成死锁。
d、 我们通过 Lock 可以知道我们的程序有没有成功获取锁,而 synchronized 关键字是没有办法做到这一点的。