Re: Отмена выполнения задачи в отдельном потоке и FutureTask
От: jqnr  
Дата: 17.03.09 18:59
Оценка:
Здравствуйте, 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>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.