Class ActiveTask
java.lang.Object
com.pnfsoftware.jeb.util.concurrent.ActiveTask
- All Implemented Interfaces:
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 Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleancancel()Request cancellation and return.booleancancel(boolean interruptThread) Request cancellation and return.booleanRequest an interruption of the task's thread.final booleanDetermine whether cancellation was requested.booleanisDone()Determine whether this task is not running.booleanjoin()Wait indefinitely for the task thread to terminate.booleanjoin(long millis) Wait for the task thread to terminate.protected voidExecuted in async mode only (in sync mode, exceptions happening during execution are not caught).protected voidExecuted in sync or async mode.protected voidExecuted in sync or async mode.voidrun()Careful not to call when currently executed (sync or async).abstract voidruni()Execute the task body.booleanExecute this task on a new daemon thread.
-
Constructor Details
-
ActiveTask
Create an active task.- Parameters:
name- task name
-
-
Method Details
-
start
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:
- true if the task thread was alive and was interrupted
-
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()Determine whether this task is not running.- Returns:
- true if no task thread exists or the task thread has terminated
-
isCancelled
public final boolean isCancelled()Determine whether cancellation was requested.- Returns:
- true if
cancel()orcancel(boolean)was called
-
join
Wait indefinitely for the task thread to terminate.- Returns:
- true after the wait completed
- Throws:
InterruptedException- if the current thread was interrupted while waiting
-
join
Wait for the task thread to terminate.- Parameters:
millis- maximum time to wait, in milliseconds; 0 means wait indefinitely- Returns:
- true after the wait completed
- Throws:
InterruptedException- if the current thread was interrupted while waiting
-
run
public void run()Careful not to call when currently executed (sync or async). -
runi
public abstract void runi()Execute the task body. -
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
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- exception raised byruni()
-