Witam mam kod w Javie, którego zadaniem jest wykonanie obliczeń w osobnym wątku a następnie zwrócenie wyniku.
public class Main {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService exec = Executors.newFixedThreadPool(2);
Future<Integer> f = exec.submit(new Callable<Integer>() {
public Integer call() throws Exception {
int i = 0;
while(i < 1000000000 && !Thread.interrupted()) {
++i;
}
System.out.println("Interrupted!");
return i;
}
});
Thread.sleep(1000);
f.cancel(true);
System.out.println(f.get());
exec.shutdown();
}
}
Ten kod niestety nie jest poprawny gdyż przed f.get zostaje wywołance f.cancel co powoduje cancellation exception. Ogólnie problem jest taki, że chcę poczekać pewien czas na zadanie i jeżeli ono się nie zakończy w zadanym czasie - to chcę pobrać częściowo policzony wynik. Na to wygląda, że Java nie udostępnia mi bezpośrednio takiego mechanizmu. Czy ktoś wie jak mogę obejść ten problem?