ReentrantReadWriteLock可重入读写锁分析
ReentrantReadWriteLock读写锁的使用
- 没有加锁就释放锁,会引起异常:java.lang.IllegalMonitorStateException: attempt to unlock read lock, not locked by current thread
ReentrantReadWriteLock rwl=new ReentrantReadWriteLock();
rwl.readLock().unlock();
- 获得写锁之前没有释放读锁,会造成阻塞,即《高性能MySQL》上说的“读锁不能插入到写锁的前面”
rwl.readLock().lock();
System.out.println("abc1");
rwl.writeLock().lock();
System.out.println("abc2");
以上代码输出“abc1”,然后阻塞
- 一个写锁请求可以插在读锁队列的前面
rwl.writeLock().lock();
System.out.println("abc2");
rwl.readLock().lock();
System.out.println("abc3");
以上代码输出“abc2”,“abc3”,然后虚拟机正常结束