Для чего бы вы использовали «Будущее» в App Engine?
-
23-09-2019 - |
Вопрос
в документы, FutureWrapper определяется следующим образом:
FutureWrapper - это простое будущее, которое завершает будущее родителя.
Что такое будущее, зачем вам нужно его обертывать и когда вы будете использовать его в App Engine?
Решение
Это java.util.concurrent.Future<V>
.Связанный документ Javadoc довольно ясен и содержит пример.Для ленивых вот копипаст:
А
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()
в другой ветке.
А FutureWrapper
это просто декоратор для любого родителя Future
.