Synchronized
1:jvm 层面实现,如果抛异常的话,jvm会自动释放掉锁
2:只有一个条件变量,锁对象的wait 和 notify
3:可以被性能监视工具监视到
4:如果在方法上添加syn那么,锁对象就是该对象,共享该对象的线程就会互斥
Lock
1:更加面向对象
2:代码层面实现
3:可以产生多个条件变量
4:可以尝试非阻塞的获取锁,能中断的获取锁,能超时获取锁
Lock能完成所有synchronized的功能,并且更加面向对象,能提供更精确的定义,更好的性能
synchronized 会自动释放锁,lock需要手动释放锁.