Java ReentrantReadWriteLock 同一个线程先 readlock, 再 witelock 死锁 - dead lock
Lock downgrading
Reentrancy also allows downgrading from the write lock to a read lock, by acquiring the write lock, then the read lock and then releasing the write lock. However, upgrading from a read lock to the write lock is not possible.
What I Learned
- Locking a readlock, then locking the write lock on the same lock creates a deadlock.
- Deadlocks created using locks instead of monitors does not appear in thread dumps (like those created by kill -3 (linux) or Ctrl+Break (windows)).
- Keep digging and you’ll uncover a nasty incorrect assumption you’ve been making.
-XX:+PrintConcurrentLocks
detects some deadlocks-XX:+PrintConcurrentLocks
does not print reentrant locks on stack traces-XX:+PrintConcurrentLocks
does not detect acquiring read then write lock in the same thread deadlock