On this project, a Manager performs event queuing, and to return the result of the event a callback is used (the callback does not extend Runnable)
I would have the thread which executes the task, also execute the call back. Instead of creating a Thread each time, I suggest you use an ExecutorService.
public static void submit(ExecutorService service,
Callable callable,
Consumer callback) {
service.submit(() -> {
try {
callback.accept(callable.call());
} catch (Throwable t) {
// log the Throwable
}
});
}