Lock提供了一个锁方法:lock(),去获得代码执行权限,又通过unLock()去释放代码执行权限,而Synchronized只有一个代码块:Synchronized {},不够灵活。
Lock还提供了一个同步非阻塞方法判断是否获得了代码执行权限:tryLock(),这个方法会返回布尔值来标志是否获得了锁;同时提供了一个带有锁超时参数的重载方法,tryLock(Long time,TImeUnit timeUnit)。所以比Synchronized更加灵活。
Lock能够保证线程按照先后顺序去获得锁,Synchronized不能保证。