I see that you call cache.clear() after acquiring explicit lock on key "fake". This cause cache clear to hang and this in turn prevents lock.unlock() call. Explicit lock also holds the exchange process.
If I comment out cache.clear() test passes without deadlock. --Yakov
