public Resource.Lock acquire(String lockKey) { final int idx = getIndex(lockKey); locks[idx].lock(); return new Resource.Lock() { boolean released = false; public void release() { if (!released) { released = true; locks[idx].unlock(); } } public String toString() { return "MemoryLock " + idx; } }; }