用法不同。synchronized既能够加在方法上,也能够加载特定的代码块上,括号中表示须要锁的对象。而Lock须要显示地指定起始位置和终止位置。synchronzied是托管给jvm执行的,Lock锁定是经过代码实现的。jvm
在性能上来讲,若是竞争资源不激烈,二者的性能是差很少的,而当竞争资源很是激烈时(即有大量线程同时竞争),此时Lock的性能要远远优于synchronized。因此说,在具体使用时要根据适当状况选择。性能
锁的机制不同。synchronized得到锁和释放的方式都是在块结构中,并且是自动释放锁。而Lock则须要开发人员手动去释放,而且必须在finally块中释放,不然会引发死锁问题的发生。线程
Lock是一个接口,不是Java语言内置的;synchronized是Java语言的关键字,所以是内置特性。对象
采用synchronized不须要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完以后或者出现异常时,系统会自动让线程释放对锁的占用;而Lock在发生异常时,若是没有主动通unLock()去释放锁,则极可能形成死锁现象,所以使用Lock时须要在finally块中释放锁;接口
Lock可让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不可以响应中断;经过Lock能够知道有没有成功获取锁,而synchronized却没法办到。Lock能够提升多个线程进行读操做的效率。资源