Class ImmediateJobScheduler

java.lang.Object
io.deephaven.engine.table.impl.util.ImmediateJobScheduler
All Implemented Interfaces:
JobScheduler

public class ImmediateJobScheduler extends Object implements JobScheduler
A JobScheduler that runs jobs on the thread that submits them, with a thread count of one.

A submit from a thread that is not already running this scheduler's jobs runs the job before returning, along with every job submitted while it runs. Jobs submitted from within a running job are queued rather than run recursively, and the queue is drained most recently submitted first, so nested work runs depth-first rather than in submission order.

Only one thread may run this scheduler's jobs at a time: a submit from any other thread while jobs are running throws IllegalCallerException. A job that completes asynchronously must therefore resume on the running thread, or after the jobs have finished. An Error thrown by a job propagates out of the submit that is running it.

  • Constructor Details

    • ImmediateJobScheduler

      public ImmediateJobScheduler()
  • Method Details

    • submit

      public void submit(ExecutionContext executionContext, Runnable runnable, LogOutputAppendable description, Consumer<Exception> onError)
      Description copied from interface: JobScheduler
      Cause runnable to be executed.

      A scheduler runs every job it accepts: at once, after queuing it, or, when it has no thread free and no queue to hold the job, on the calling thread. A scheduler that cannot take a job at all throws instead, and the job does not run.

      Specified by:
      submit in interface JobScheduler
      Parameters:
      executionContext - the execution context to run it under
      runnable - the runnable to execute
      description - a description for logging
      onError - a routine to call if an exception occurs while running runnable
    • getAccumulatedPerformance

      public BasePerformanceEntry getAccumulatedPerformance()
      Description copied from interface: JobScheduler
      The performance statistics of all runnables that have been completed off-thread, or null if all were executed in the current thread.

      When initializing an operation, the OperationInitializerJobScheduler executes the completion callback as part of another task. Therefore, you must not read the accumulated performance from the completion callback when initializing an operation; as it could miss data from some of the tasks. Furthermore, even though the completion callback identifies the result as ready does not mean that the completion callback has actually completed. To guard against this the OperationInitializerJobScheduler waits for all jobs to be complete before returning the BasePerformanceEntry. Therefore, if you call this from a completion callback, then the operation will hang. ExecutorJobScheduler waits the same way, so the same applies to it.

      Specified by:
      getAccumulatedPerformance in interface JobScheduler
    • threadCount

      public int threadCount()
      Description copied from interface: JobScheduler
      How many threads exist in the job scheduler? The job submitters can use this value to determine how many sub-jobs to split work into.
      Specified by:
      threadCount in interface JobScheduler