code: @Override
      protected void searchStep() {
          // (1) execute subsearches in parallel
          searches.forEach(s -> futures.add(pool.submit(s)));
          // (2) wait for termination of subsearches
          while (!futures.isEmpty()) {
              try {
                  futures.poll().get();
              } catch (InterruptedException | ExecutionException ex) {
                  throw new SearchException("An error occured during concurrent execution of searches "
                          + "in basic parallel search.", ex);
              }
          }
          // (3) stop main search
          stop();
      }
docs: This algorithm consists of a single search step only, in which (1) the contained subsearches are executed in
  parallel, (2) the main search waits until they terminate and (3) the main search stops. A subsearch may terminate
  because it has come to its natural end, because it has active stop criteria or because the main search was
  requested to stop and propagated this request to the subsearches.