Здравствуйте, runtime2, Вы писали:
Почему сделали именно так (см. выделенный текст) ?
Обычно наоборот, Feature является "оберткой" над Callable и запускается примерно так:
class OurCallable extends Callable<String> {
}
// вызов
Callable<String> ourCallable = new OurCallable (...);
ExecutorService executor = ...;
Feature<String> ourFeature = executor.submit(ourCallable);
R>У меня есть программка.
...
R>R>public class FutureTaskTest {
R> public static void main(String[] args) throws Exception {
R> new FutureTaskTest().test();
R> }
R> private final ExecutorService executor =
R> Executors.newSingleThreadExecutor(new DaemonThreadFactory());
R> public void test() throws Exception {
R> Task task = new Task();
R> FutureTask<Void> future = new FutureTask<Void>(task);
R> task.setFuture(future);
R> executor.execute(future);
R> Thread.sleep(100);
R> future.cancel(true);
R> System.out.println("wait");
R> try {
R> future.get();
R> } catch(CancellationException ex) {
R> System.out.println("cancellation exception");
R> }
R> System.out.println("thinking task done");
R> Thread.sleep(1000);
R> }
R>}
R> class Task implements Callable<Void> {
R> private Future<Void> future;
R> public void setFuture(Future<Void> future) {
R> this.future = future;
R> }
R>}
R>