1. synchronized 是jvm 层次的(可以会造成死锁), lock 可以写代码控制,一般在异常时在 finally 里可以 unlock 释放锁
2. lock 细度更细,synchronized 一个线程锁住了,其他线程无法进入。而 lock 里的 ReadWriteLock可以获得 读锁 和写锁。可以允许多个写锁进入,
3. lock 可以用 trylock 试着获得 锁 ,如果获得返回true,接着执行,否则可以去执行其他事情,而 synchronized 则一直等待,同时tryLock 还可以设置
在某个时间段内获得锁
if(lock.tryLock()){
// 获得锁 ,继续执行
} else {
// 没获得锁 ,干其他事情
}
4. lock 可以new 一个 condition ,condition 相当于 wait 和 notify 的作用