Для чего бы вы использовали «Будущее» в App Engine?

StackOverflow https://stackoverflow.com/questions/2360492

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top