Class BatchingExecutor<P extends BatchedWorkProcessor>


  • public final class BatchingExecutor<P extends BatchedWorkProcessor>
    extends Object
    An executor of works that accepts works from multiple threads, puts them in a queue, and processes them in batches in a single background thread.

    Useful when works can be merged together for optimization purposes (bulking in Elasticsearch), or when they should never be executed in parallel (writes to a Lucene index).

    • Constructor Detail

      • BatchingExecutor

        public BatchingExecutor​(String name,
                                P processor,
                                int maxTasksPerBatch,
                                boolean fair,
                                FailureHandler failureHandler)
        Parameters:
        name - The name of the executor thread (and of this executor when reporting errors)
        processor - A task processor. May not be thread-safe.
        maxTasksPerBatch - The maximum number of tasks to process in a single batch. Higher values mean more opportunity for the processor to optimize execution, but higher heap consumption.
        fair - if true tasks are always submitted to the processor in FIFO order, if false tasks submitted when the internal queue is full may be submitted out of order.
        failureHandler - A failure handler to report failures of the background thread.
    • Method Detail

      • start

        public void start​(ExecutorService executorService)
        Start the executor, allowing works to be submitted through submit(BatchedWork).
        Parameters:
        executorService - An executor service with at least one thread.
      • stop

        public void stop()
        Stop the executor, no longer allowing works to be submitted through submit(BatchedWork).

        This will remove pending works from the queue.

      • submit

        public void submit​(BatchedWork<? super P> work)
                    throws InterruptedException
        Submit a work for execution.

        Must not be called when the executor is stopped.

        Parameters:
        work - A work to execute.
        Throws:
        InterruptedException - If the current thread is interrupted while enqueuing the work.
      • completion

        public CompletableFuture<?> completion()
        Returns:
        A future that completes when all works submitted to the executor so far are completely executed. Works submitted to the executor after entering this method may delay the wait.