Jackson Zhang

记录是最好的回忆!

ReentrantReadWriteLock类和ReentrantLock类的区别

java.util.concurrent.locks包定义了两个锁类,ReentrantLock和ReentrantReadWriteLock类。

当有很多线程都从某个数据结构中读取数据而很少有线程对其进行修改时,后者就很有用了。在这种情况下,允许读取器线程共享访问是合适的。当然,写入器线程依然必须是互斥访问的

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

(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();}
	}

对所有修改者加写锁

	public void transfer(){
		writeLock.lock();
		try{...};
		finally{writeLock.unlock();}
	}

阅读更多
个人分类: 多线程
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭