Задача на собеседовании

Feb 05, 2010 23:32


Пример задачи достаточно необычной, которую мне задали.
sample task + my solution )

Leave a comment

lexicore February 5 2010, 22:15:46 UTC
Тоже сразу о Future подумал.

Reply

magicprinc February 6 2010, 10:19:15 UTC
А вообще это мне одному кажется, что Future не хватает метода

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

magicprinc February 8 2010, 10:54:14 UTC
Это не совсем то, посмотрите там надо явно выбирать готовые futures.
А я говорю о том, чтобы получил Future и поручил ему самому в том потоке, где он "посчитается" доделать кой-какую работенку.

Reply

sassa_nf February 8 2010, 13:28:59 UTC
в смысле?

schedule Future, который вызывает take(), блокируется до появления выполненного Future, и является Listener выполнения работы.

Reply

alishka February 8 2010, 13:26:53 UTC
А как быть если на момент addListener() Future уже выполнилось? Придется городить либо нотификацию из отдельного трэда (но листнер должен быть уже готов принять нотификацию до завершения addListener()), либо забивать на нотификацию, но опять же клиенту городить собственную проверку не завершилось ли оно уже.
Если листнер, то надо запуск делать отдельной операцией, чего существующий API не предполагает.
ИМХО нужно более радикалиный редизайн экзекьютора делать для этого.

Reply

magicprinc February 8 2010, 15:52:14 UTC
Случайно ответил в основной тред:
http://community.livejournal.com/ru_java/902522.html?thread=12052090#t12052090

Reply


Leave a comment

Up