zl程序教程

您现在的位置是:首页 >  工具

当前栏目

第三篇(2):lock的学习与使用

学习 lock 第三篇 使用
2023-09-27 14:19:46 时间

今天我们来学习并发包下的Lock(锁)的知识。之所以Java在有synchronized的情况下,还提供基于lock接口实现的锁。是由于lock有一些synchronized没有特性。可以再发生死锁时相应中断,释放锁。

lock的类图

在这里插入图片描述
从该类图我们可以看出ReentrentLock实现了Lock接口,其对受保护资源的读写都要加锁。同时加锁之后需要手动的释放锁。由Lock产生Condition实例。
另外一个接口是ReentrentReadWriteLock,其内部维护了一个读锁ReadLock和一个写锁WriteLock。其中ReadLock是并发的,而WriteLock是同步的,同一时间只能有一个线程持有WriteLock。

lock 与synchronized 的区别

上面说可以通过lock来破坏不可抢占的条件,那么lock为啥可以支持呢?因为lock锁有如下三个特性:

//能够响应中断
 void lockInterruptibly(