private void waitForRunningOperationsEnded() {
   blockAllOperations();
   boolean breakAtNext = false;
   while (true) {
     Collection<LockerValue<KP>> values = locker.getMapKeyLockToValueLock().values();
     int waitingThreads = 0;
     for (LockerValue<KP> lockerValue : values) {
       waitingThreads += lockerValue.getLock().getQueueLength();
     }
     if (runningOperations.get() - waitingThreads <= 0) {
       if (breakAtNext) {
         break;
       }
       breakAtNext = true;
     } else {
       breakAtNext = false;
     }
     try {
       Thread.sleep(10);
     } catch (InterruptedException e) {
       break;
     }
   }
 }