Why a ReentrantGuard for this and a ReentrantLock for the one above? How do they relate to eachother? Is the any risk of deadlocking interleavings?