重入锁最重要的几个方法

这几个方法都是 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 要更灵活,更强大!多线程

相关文章
相关标签/搜索