1.synchronized是关键字,而Lock是一个接口
2.synchronized会自动释放锁,而Lock必须手动释放锁
3.synchronized是不可中断的,Lock可以中断也可以不中断
4.通过Lock可以知道线程有没有拿到锁,而synchronized不能
5.synchronized能锁住方法和代码块,而Lock只能锁住代码块
6.Lock可以使用读锁提高多线程的效率,ReentrantReadWhriteLock允许多个线程来读,只允许一个线程来写
7.synchronized是非公平锁,ReentrantLock可以控制是否是公平锁,默认是非公平锁