ReentrantLock可重入锁的用法

锁作为Java处理共享资源时的一种方式,为满足形形色色的应用场景,Jdk提供了多种锁机制,而以Lock接口实现的锁更是多到让人眼花缭乱。

可重入锁:ReentrantLock

这里以ReentrantLock的重入为例,演示它的基本特性。

ReentrantLock.getHoldCount()

可以得知已经加了多少把锁。

ReentrantLock.isHeldByCurrentThread()

可以知道已加入的锁是不是本线程所创建的。

ReentrantLock.tryLock()

试着加入一把独占锁。

ReentrantLock.tryLock(timeout, unit)

尝试加一把独占锁,若未能如愿,则在单位时间内继续尝试。ReentrantLock重入特性完整示例代码

Lock的Condition特性

Condition作为Lock接口下的其中一个特性,伴随着形形色色的锁,以下就以ReentrantLock为实例,展示Condition的特性。Condition作为两个线程协作的中间人,通过Condition.await()作一个等待操作,然后通过Condition.signal()唤醒一个等待。他们都必需放在lock.lock()与lock.unlock()之间,就像使用wait方法需要一个synchronized代码块。

await()与wait()的相似之处在于它们都能自我唤醒,前提是,如果设置了等待的时间参数[await(time, unit)]。ReentrantLock的Condition特性完整示例代码