45public abstract class Task {
48 private final boolean instant;
54 private boolean running;
60 private Optional<Object> key = Optional.empty();
63 private StackTraceElement[] creationStackTrace;
66 private Optional<Long> runStartTime = Optional.empty();
69 private final UUID uuid;
72 private final long taskCreationTime;
75 public Task(
boolean instant,
int delay) {
80 this.instant = instant;
82 this.creationStackTrace = Thread.currentThread().getStackTrace();
83 this.uuid = UUID.randomUUID();
84 this.taskCreationTime = System.currentTimeMillis();
87 public String getTaskId() {
88 return uuid.toString();
96 public void setExecutionTime() {
97 runStartTime = Optional.of(System.currentTimeMillis());
100 public long getTaskCreationTime() {
101 return taskCreationTime;
104 public Optional<Long> getRunStartTime() {
108 public Long getElapsedTimeFromRunStartTime() {
109 if (runStartTime.isPresent()) {
110 return System.currentTimeMillis() - runStartTime.get();
115 public String getCreationStackTraceStr() {
116 StringBuilder sb =
new StringBuilder();
117 for (StackTraceElement ste : creationStackTrace) {
118 sb.append(ste.toString()).append(
"\n");
120 return sb.toString();
123 final synchronized void process() {
124 if (++counter >= delay && running) {
133 protected void baseExecute() {
147 public synchronized final void cancel() {
155 public synchronized final void cancel(
boolean logout) {
177 void onException(Exception e) {
183 key = Optional.ofNullable(newKey);
212 synchronized void setRunning(
boolean running) {
213 this.running = running;