ReentrantLock介绍
ReentrantLock是java util concurrent包中提供的一个锁实现,相对于synchronized关键字锁,
ReentrantLock提供了具备超时时间的tryLock、可中断的lockInterruptibly,并且能够通过newCondition创建多个等待条件。
ReentrantLock能够保证和synchronized一致的内存模型规则(happen before)。
ReentrantLock中的Reentrant的意思是可重入,也就是一个线程对一个锁加锁后还可以在锁中再加这个锁。
ReentrantLock使用
加锁
ReentrantLock实现了Lock接口。
lock的常见使用方式如下,创建完ReentrantLock后,可以对lock对象调用lock方法加锁,
使用时要注意的是要注意将加锁后的代码加上try finally代码块,并在finally中调用lock.unlock()保证最后锁能unlock释放。
lock加锁代码中的逻辑能独占运行,和其他要加锁的代码间,保证原子性、可见性和防止重排序等问题。默认的构造函数创建的是非公平锁(有可能出现插队问题但是整体的吞吐量更高),如果要创建
公平锁,