Right. That's why I suggest to have `ReadWriteLock` to avoid blocking around `getTheConnection` within `obtainConnection()` implementation.
And it looks like we may catch race condition in the  `obtainConnection()` after `AbstractClientConnectionFactory#forceClose`. Because the last one doesn't **synchronized**