存在层次上
synchronized
: Java
的关键字,在jvm
层面上。
Lock
: 是一个接口。
锁的释放
synchronized
: 1、以获取锁的线程执行完同步代码,释放锁; 2、线程执行发生异常,jvm会让线程释放锁。
Lock
: 在finally
中必须释放锁,不然容易造成线程死锁。
锁的获取
synchronized
: 假设A
线程获得锁,B
线程等待。如果A
线程阻塞,B
线程会一直等待。
Lock
: 分情况而定,Lock
有多个锁获取的方式,大致就是可以尝试获得锁,线程可以不用一直等待(可以通过tryLock
判断有没有锁)。
锁的释放(死锁产生)
synchronized
: 在发生异常时候会自动释放占有的锁,因此不会出现死锁。
Lock
: 发生异常时候,不会主动释放占有的锁,必须手动unlock
来释放锁,可能引起死锁的发生。
锁的状态
synchronized
&