Class JobSystem

java.lang.Object
com.deco2800.game.concurrency.JobSystem

public class JobSystem extends Object
A job system provides a general-purpose way to run multi-threaded code. This is a recommended approach for compute-heavy tasks which may slow down the game. When a 'job' is launched, it is scheduled to be executed on an available thread at some time in the future. The job system makes use of thread pooling and software tasks rather than spawning a new thread per task. See Wiki/Concurrency for details.
  • Method Details

    • launch

      public static <T> CompletableFuture<T> launch(Supplier<T> supplier)
      Launch an asynchronous job which may be run on a separate thread. The job should not block on anything except other jobs, i.e. using get(). For jobs which block on I/O, delays, etc. use launchBlocking(Supplier).
      Type Parameters:
      T - Return type of the job
      Parameters:
      supplier - Non-blocking method which is executed asynchronously.
      Returns:
      A Future which evaluates to the job's return value. Calling get() will give the result of the supplied method, blocking until it's finished. Avoid calling get() in the main update loop.
    • launchBlocking

      public static <T> CompletableFuture<T> launchBlocking(Supplier<T> supplier)
      Launch an asynchronous job which may be run on a separate thread. This is much less efficient than launch(Supplier) since a new thread may be created for each call. Avoid unless blocking is necessary.
      Type Parameters:
      T - Return type of the job
      Parameters:
      supplier - Method which is executed asynchronously, and may block.
      Returns:
      A Future which evaluates to the job's return value. Calling get() will give the result of the supplied method, blocking until it's finished.