1.Synchronized 可以作用于代码块,静态方法 ,实例方法。作用于代码块时锁为Synchronized 括号里的对象,作用于静态方法时,锁为当前类的class 对象。作用于实例方法时,锁为对象实例。Synchronized 的使用比ReentrantLock简单,加锁和释放锁的操作都是由虚拟机完成的。Synchronized是非公平锁。
2.ReentrantLock的加锁和解锁操作都需要手动完成。ReentrantLock可以设置为公平锁或者非公平锁。公平锁就是通过同步队列来实现多个线程按照申请锁的顺序获取锁。 ReentrantLock 的使用场景更多,公平锁还有读写锁都可以在复杂场景中发挥重要作用。