Is there any possibility that this read lock it has is part of the same ReentrantReadWriteLock for which this same thread is trying to acquire the write lock? If so, that will definitely hang forever. That is, simply calling "lock.readLock().lock(); lock.writeLock().lock();" will block forever. See: https://gist.github.com/3180847#file_single_thread_deadlock.javaAccording to our code this can't happen, since we never get a read lock on a BIN (latchShared always calls latchExclusive). But otherwise it would be something to suspect, especially given the null exclusive lock.sync.exclusiveOwnerThread field that Phil pointed out.