1.从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。synchronized是java中的一个关键字,也就是说是Java语言内置的特性。
2.synchronized对象在获取锁后,其他线程只能等待,无法同时进行读操作,影响程序执行效率。lock锁住对象时,当一个线程在进行读操作时,其他线程可以进行读操作。
3.synchronized不需要用户去手动释放锁,执行完后系统会自动让线程释放对锁的占用。Lock则必须要用户去手动释放锁,如果没有主动释放锁,就有可能导致出现死锁现象。
4.synchronized无法判断状态,lock可以判断状态
5.synchronized是非公平锁,lock可以自动选择是否公平锁。
6.synchronized适合少量代码,lock适合大量同步代码。