读写锁

来源:互联网 发布:希特勒南极 知乎 编辑:程序博客网 时间:2024/04/24 05:49

java.util.concurrent.locks包定义了两个锁,ReentrantLock类和ReentrantReadWriteLocklei。如果很多线程从一个数据结构读取数据而很少线程修改其中数据的话,后者是十分有用的。在这种情况下,允许读者线程共享访问时合适的。当然,写者线程依然必须是互斥访问的。

以下是使用读/写锁的必要步骤:

1、构造一个ReentrantReadWriteLock对象:

private ReentrantReadWriteLock rwl = new ReentrantReadWriteLock ();

2、抽取读锁和写锁:

private Lock readLock = rwl.readLock();

private Lock writeLock = rwl.writeLock();

3、对所有的访问者加读锁:

public double getTotalBalance()

{

readLock.lock();

try { ...... }

finally { readLock.unlock(); }

}

4、对所有的修改者加写锁:

public void transfer(......)

{

writeLock.lock();

try { ...... }

finally { writeLock.unlock(); }

}