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()); } }