Class ActiveTask

java.lang.Object
com.pnfsoftware.jeb.util.concurrent.ActiveTask
All Implemented Interfaces:
Runnable

@Ser public abstract class ActiveTask extends Object implements Runnable
A runnable that can control its own execution. Tasks extending this class must implement the runi() method. Client code can start a task, request cancellation and/or interruption, as well as join for the task to terminate (either normal termination or a forced termination resulting from a cancel/interrupt request).

This class is similar to some implementation of futures (albeit, its interface is simpler). The underlying execution primitive (the thread) is indirectly accessible via the join() method; in particular, this class should be used if the client code wants to explicitly join on the underlying thread.

  • Constructor Details

    • ActiveTask

      public ActiveTask(String name)
      Parameters:
      name - task name
    • ActiveTask

      public ActiveTask()
  • Method Details

    • start

      public boolean start(Runnable completion)
      Execute this task on a new daemon thread. If a task has already been started and has not completed, a new task will not be started and instead this method will return false.
      Parameters:
      completion - optional runnable that will be executed upon completion, no matter the outcome (even if an exception raised); the execution will take place on the task's thread
      Returns:
      true if a new task was started, false otherwise
    • interrupt

      public boolean interrupt()
      Request an interruption of the task's thread. This method is non blocking.
      Returns:
    • cancel

      public boolean cancel()
      Request cancellation and return. The thread is interrupted.
      Returns:
      true if the thread was alive and has been cancelled
    • cancel

      public boolean cancel(boolean interruptThread)
      Request cancellation and return.
      Parameters:
      interruptThread - true to also interrupt the thread
      Returns:
      true if the thread was alive and has been cancelled
    • isDone

      public boolean isDone()
    • isCancelled

      public final boolean isCancelled()
    • join

      public boolean join() throws InterruptedException
      Throws:
      InterruptedException
    • join

      public boolean join(long millis) throws InterruptedException
      Throws:
      InterruptedException
    • run

      public void run()
      Careful not to call when currently executed (sync or async).
      Specified by:
      run in interface Runnable
    • runi

      public abstract void runi()
    • onPreExecution

      protected void onPreExecution()
      Executed in sync or async mode. Default implementation does nothing.
    • onPostExecution

      protected void onPostExecution()
      Executed in sync or async mode. Default implementation does nothing.
    • onException

      protected void onException(Exception e)
      Executed in async mode only (in sync mode, exceptions happening during execution are not caught). The default implementation logs the error and does not rethrow it.
      Parameters:
      e -