0

Hi i have read about the ReadWriteLock in Java but i am not sure that i have grasped the reentrance part of it. Here is two brief code examples using only one main thread to show reentrance

public class Locks {
    public static void main( String[] args ) {
        ReadWriteLock lock = new ReentrantReadWriteLock();
        lock.writeLock().lock();
        lock.readLock().lock();
        System.out.println( "Reentrance acheieved" );
        lock.readLock().unlock();
        lock.writeLock().unlock();
    }
}

and the second example

public class Locks {
    public static void main( String[] args ) {
        ReadWriteLock lock = new ReentrantReadWriteLock();
        lock.readLock().lock();
        lock.writeLock().lock();
        System.out.println( "Reentrance acheieved" );
        lock.writeLock().unlock();
        lock.readLock().unlock();
    }
}

In the first one the sysout is performed but not in the second one, why is that? Both locks are to be obtained by the same thread so we have a reentrance situation here, but the entrance is achieved only when writelock is obtained first which is strange because in non reentrant situation, the doc says that a write operation is exclusive with all the other operations (be it write or read).

schtever
  • 3,210
  • 16
  • 25
user2133558
  • 524
  • 2
  • 10
  • 29
  • Possible duplicate of [Java ReentrantReadWriteLocks - how to safely acquire write lock?](http://stackoverflow.com/questions/464784/java-reentrantreadwritelocks-how-to-safely-acquire-write-lock) – shmosel Oct 27 '16 at 22:19

1 Answers1

2

The answer is right there in the documentation under "Reentrancy":

This lock allows both readers and writers to reacquire read or write locks in the style of a ReentrantLock. Non-reentrant readers are not allowed until all write locks held by the writing thread have been released.

Additionally, a writer can acquire the read lock, but not vice-versa. Among other applications, reentrancy can be useful when write locks are held during calls or callbacks to methods that perform reads under read locks. If a reader tries to acquire the write lock it will never succeed.

Kevin Herron
  • 6,500
  • 3
  • 26
  • 35