A Future
представляет собой результат
асинхронные вычисления. Методы
при условии, чтобы проверить, если вычисление
завершено, ждать его
завершение и получить результат
вычисления. Результат может
можно получить только с помощью метода get
когда вычисление завершено,
блокировка при необходимости до
готовы. Отмена осуществляется
метод отмены. Дополнительные методы
предоставляются для определения, если задача
завершено нормально или было отменено.
Как только вычисление завершено,
вычисление не может быть отменено. Если
Вы хотели бы использовать Future
для
ради отменяемости но не предоставляем
полезный результат, вы можете объявить типы
вида Future<?>
и возврата null
в результате основной задачи.
Пример использования (Обратите внимание, что следующее
все классы выдуманы.)
interface ArchiveSearcher { String search(String target); }
class App {
ExecutorService executor = ...
ArchiveSearcher searcher = ...
void showSearch(final String target)
throws InterruptedException {
Future<String> future
= executor.submit(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
displayOtherThings(); // do other things while searching
try {
displayText(future.get()); // use future
} catch (ExecutionException ex) { cleanup(); return; }
}
}
Класс FutureTask
является
реализация Future
, что
реализует Runnable
, и поэтому может быть
выполнено Executor
. Например,
вышеуказанная конструкция с представлением
можно заменить на:
FutureTask<String> future =
new FutureTask<String>(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
executor.execute(future);
Эффекты согласованности памяти: Действия
взятый асинхронным вычислением
произойдет до действий, следующих за
соответствующий Future.get()
в другом
нить.