Это не совсем то, посмотрите там надо явно выбирать готовые futures. А я говорю о том, чтобы получил Future и поручил ему самому в том потоке, где он "посчитается" доделать кой-какую работенку.
А как быть если на момент addListener() Future уже выполнилось? Придется городить либо нотификацию из отдельного трэда (но листнер должен быть уже готов принять нотификацию до завершения addListener()), либо забивать на нотификацию, но опять же клиенту городить собственную проверку не завершилось ли оно уже. Если листнер, то надо запуск делать отдельной операцией, чего существующий API не предполагает. ИМХО нужно более радикалиный редизайн экзекьютора делать для этого.
Reply
void addListener(FutureListener listener); //можно вызывать много раз
public interface FutureListener extends EventListener {
void operationComplete(Future future) throws Exception;
}
чтобы:
Future f = ...
f.addListener(new FutureListener(){
public void operationComplete(Future future) throws Exception {
проверили успех, записали в БД/и тп и тд
}
});
Эдакий fire-and-forget
Reply
Reply
А я говорю о том, чтобы получил Future и поручил ему самому в том потоке, где он "посчитается" доделать кой-какую работенку.
Reply
schedule Future, который вызывает take(), блокируется до появления выполненного Future, и является Listener выполнения работы.
Reply
Если листнер, то надо запуск делать отдельной операцией, чего существующий API не предполагает.
ИМХО нужно более радикалиный редизайн экзекьютора делать для этого.
Reply
http://community.livejournal.com/ru_java/902522.html?thread=12052090#t12052090
Reply
Leave a comment