Reference implementation.
Official documentation:
- Wikibook (incomplete)
Specific topics:
Background:
>>>ITwacht<<<
Reference implementation.
Official documentation:
class Japavapa implements Callable, ManagedTask, ManagedTaskListener {
String word;
LocalTime submit;
public Japavapa(String word) {
this.word = word;
}
public String toString() {
return ":P " + word;
}
@Override
public String call() throws Exception {
Random rand = new Random();
Thread.currentThread().sleep(rand.nextInt(1000));
Matcher match = Pattern.compile("([AEIOUYaeiouy]+)").matcher(word);
return match.find() ? match.replaceAll(match.group(1) + "p" + match.group(1)) : word;
}
@Override
public ManagedTaskListener getManagedTaskListener() {
return this;
}
@Override
public Map<String, String> getExecutionProperties() {
return null;
}
@Override
public void taskSubmitted(Future<?> future, ManagedExecutorService executor, Object task) {
submit = LocalTime.now();
logger.info("SUBMIT " + task
+ " AT " + submit
+ " ON " + executor);
}
@Override
public void taskAborted(Future<?> future, ManagedExecutorService executor, Object task, Throwable exception) {
logger.info("ABORTED " + task
+ " AFTER " + Duration.between(submit, LocalTime.now()).toMillis()
+ "ms ON " + Thread.currentThread().getName());
}
@Override
public void taskDone(Future<?> future, ManagedExecutorService executor, Object task, Throwable exception) {
logger.info("DONE " + task
+ " AFTER " + Duration.between(submit, LocalTime.now()).toMillis() + "ms");
}
@Override
public void taskStarting(Future<?> future, ManagedExecutorService executor, Object task) {
logger.info("STARTING " + task
+ " AFTER " + Duration.between(submit, LocalTime.now()).toMillis()
+ "ms ON " + Thread.currentThread().getName());
}
}