参考答案
重入锁最重要的几个方法:
重入锁的这6个重要方法,都是 Lock 接口中定义的。
1. lock()
获取锁,有以下三种情况:
- 锁空闲:直接获取锁并返回,同时设置锁持有者数量为:1。
- 当前线程持有锁:直接获取锁并返回,同时锁持有者数量递增1。
- 其他线程持有锁:当前线程会休眠等待,直至获取锁为止。
2. lockInterruptibly()
获取锁,逻辑和 lock() 方法一样,但这个方法在获取锁过程中能响应中断。
3. tryLock()
从关键字字面理解,这是在尝试获取锁,获取成功返回:true,获取失败返回:false, 这个方法不会等待,有以下三种情况:
- 锁空闲:直接获取锁并返回:true,同时设置锁持有者数量为:1。
- 当前线程持有锁:直接获取锁并返回:true,同时锁持有者数量递增1。
- 其他线程持有锁:获取锁失败,返回:false。
4. tryLock(long timeout, TimeUnit unit)
逻辑和 tryLock() 差不多,只是这个方法是带时间的。
5. unlock()
释放锁,每次锁持有者数量递减 1,直到 0 为止。所以,现在知道为什么 lock 多少次,就要对应 unlock 多少次了吧。
6. newCondition
返回一个这个锁的 Condition 实例,可以实现 synchronized 关键字类似 wait/ notify 实现多线程通信的功能,这个比 wait/ notify 更灵活、更强大。
以上,是Java面试题【重入锁有哪些重要的方法】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—