ReentrantReadWriteLock.java
时间: 2024-07-18 13:00:36 浏览: 81
`ReentrantReadWriteLock`是Java并发包中提供的一个可重入互斥锁(Reentrant)和读写锁(ReadWriteLock)的组合。它允许多个线程同时读取共享资源,但写入操作会独占资源,保证了数据的一致性和并发性能。
以下是`ReentrantReadWriteLock`的主要特点和用法:
1. **读写锁(Read/Write Locks)**:它包含两个锁,`ReadLock`用于读操作,`WriteLock`用于写操作。多个线程可以同时持有读锁,但任何时候只有一个线程可以持有写锁。
2. **可重入(Reentrant)**:如果一个线程已经获取了一个锁,那么它可以再获取同一类型的更多锁,直到达到了最大重入次数(默认无限制)。这对于递归调用的场景非常有用。
3. **公平锁(Fairness)**:默认情况下,`ReentrantReadWriteLock`是非公平的,这意味着线程获得锁的顺序取决于调度,而不是请求的顺序。如果你想要按照请求顺序分配锁,可以使用`new ReentrantReadWriteLock(true)`创建公平锁。
4. **中断(Interruptible)**:线程可以在持有锁时被中断,中断后需要显式释放锁才能恢复中断。
```java
ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
public void readOperation() {
lock.readLock().lock();
try {
// 读操作
} finally {
lock.readLock().unlock();
}
}
public void writeOperation() {
lock.writeLock().lock();
try {
// 写操作
} finally {
lock.writeLock().unlock();
}
}
```