@Test(expected = IllegalStateException.class) public void release_BeforeAcquire_Throws() throws InterruptedException { ObjectLockHandler<String> handler = new ObjectLockHandler<>(); handler.release("object"); }
public void release(@NonNull final T object) { checkNotNull(object); if (!locks.containsKey(object)) { throw new IllegalStateException("Tried to release without acquiring first: " + object); } locks.get(object).lockObject.release(); freeLock(object); }
ObjectLockHandler { public void release(@NonNull final T object) { checkNotNull(object); if (!locks.containsKey(object)) { throw new IllegalStateException("Tried to release without acquiring first: " + object); } locks.get(object).lockObject.release(); freeLock(object); } }
ObjectLockHandler { public void release(@NonNull final T object) { checkNotNull(object); if (!locks.containsKey(object)) { throw new IllegalStateException("Tried to release without acquiring first: " + object); } locks.get(object).lockObject.release(); freeLock(object); }  }
ObjectLockHandler { public void release(@NonNull final T object) { checkNotNull(object); if (!locks.containsKey(object)) { throw new IllegalStateException("Tried to release without acquiring first: " + object); } locks.get(object).lockObject.release(); freeLock(object); }  void acquire(@NonNull final T object); void release(@NonNull final T object); }
ObjectLockHandler { public void release(@NonNull final T object) { checkNotNull(object); if (!locks.containsKey(object)) { throw new IllegalStateException("Tried to release without acquiring first: " + object); } locks.get(object).lockObject.release(); freeLock(object); }  void acquire(@NonNull final T object); void release(@NonNull final T object);  }