ReentrantReadWriteLock读写锁详解

2017-02-28 22:34:00
admin
原创 1603
摘要:ReentrantReadWriteLock读写锁详解

一、ReentrantReadWriteLock读写锁详解

函数说明:

1、Lock readLock(),获取读锁,读写锁内部的一个成员;

2、Lock writeLock(),获取写锁,读写锁内部的一个成员

3、int getReadLockCount(),读锁总重入量;

4、int getReadHoldCount(),当前线程读锁重入量;

5、int getWriteHoldCount(),当前线程写锁重入量;

6、Thread getOwner(),写锁持有的线程;


使用详解:

1、使用变量state保存重入量,低16位保存写锁重入量,高16位保存读锁重入量;

2、读锁和写锁总重入量保存在state变量,单个线程读锁重入量保存在线程局部变量;

3、写锁允许写锁和读锁重入,读锁只允许读锁重入;

4、写锁允许降级为读锁,线程获取写锁后,继续获取读锁,然后释放写锁;

5、公平锁策略,如果队列中有线程在等待,读锁和写锁都会加入等待锁队列;

6、非公平锁策略,如果队列头部是写锁在等待,只有读锁会加入等待锁队列,保证写锁不会等太久;

7、读锁不支持newCondition操作,写锁支持newCondition操作;


写锁允许读锁重入代码示例

ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
Lock writeLock = lock.writeLock();
Lock readLock = lock.readLock();
writeLock.lock();
System.out.println("in write lock");
readLock.lock();
System.out.println("in read lock");
readLock.unlock();
writeLock.unlock();


写锁降级为读锁代码示例

ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
Lock writeLock = lock.writeLock();
Lock readLock = lock.readLock();
writeLock.lock();
System.out.println("in write lock");
readLock.lock();
writeLock.unlock();
System.out.println("in read lock");
readLock.unlock();

发表评论
评论通过审核之后才会显示。