ReentrantReadWriteLock
java.util.concurrent.locks包定义了两个锁类,一个是我们熟悉的ReentrantLock类,还有一个就是读写锁ReentrantReadWriteLock类。如果很多线程从一个数据结构读取数据而很少线程修改其中数据的话,读写锁类是十分有用的。在这种情况下,允许对读者线程共享访问是合适的,当然,写着线程依然必须是互斥访问的。简单来说:读取锁允许多个reader线程同时持有,而写入锁最多只能有一个writer线程持有。
下面是读/写锁的必要步骤:
1)构造一个ReetrantReadWriteLock对象
private ReetreantReadWriteLock rwl = new ReetrantReadWriteLock();
2)抽取读锁和写锁:
private Lock readLock = rwl.readLock();
private Lock writeLock = rwl.writeLock();
3)对所有的获取方法加读锁
{
readLock.lock();
try{...}
finally{ readLockunlock();}
}
**4)对所有的修改方法加写锁:
public void write(){
writeLock.lock();
try{...};
finally{ writeLock.unlock();}
}
读写锁特点:
1)多个读者可以同时进行读
2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)
3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)
参考
《Java核心技术》
网友评论