ReentrantLock 拥有和Synchronized的相同并发性和内存语义,此外还多了锁投票,锁等候和中断锁等候。
如果A和B都想获取对象0的锁,假设A获取了对象0的锁,那么B就要等待A对对象0的释放。
如果使用synchronized的话,如果A不释放,那么B就要一直等待,不能被释放,也就是死锁。
但是如果使用的是Lock的话那么如果A不释放,B可以在等待一段时间后,中断锁等候,去干其他的事情。
因为synchronized是基于JVM设计的,所以当synchronized的代码出现异常时,那么JVM会直接释放锁。但是因为lock是使用代码去实现的,我们就要自己将锁释放掉,所以就必须将unlock()放到finally语句块中。
Lock和synchronized的区别
最新推荐文章于 2024-04-09 10:47:21 发布