手写总结:synchronized 和 lock 区别

时间:2023-12-17 21:01:38

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  的作用