code: public static <T, BT extends Procedure<? super T>> void forEach(
              Iterable<T> iterable,
              BT procedure,
              int minForkSize,
              int taskCount)
      {
          ParallelIterate.forEach(iterable, procedure, minForkSize, taskCount, ParallelIterate.EXECUTOR_SERVICE);
      }
docs: Iterate over the collection specified in parallel batches using the specified minimum fork and task count sizes.
  The {@code Procedure} used must be stateless, or use concurrent aware objects if they are to be shared.
  
  @param minForkSize Only run in parallel if input collection is longer than this.
  @param taskCount   How many parallel tasks to submit to the executor.
  TODO: How does the taskCount relate to the number of threads in the executor?
  @see #forEach(Iterable, Procedure)