Для чего бы вы использовали «Будущее» в App Engine? - PullRequest
3 голосов
/ 02 марта 2010

В документах FutureWrapper определяется следующим образом:

FutureWrapper - это простое будущее, которое Заворачивает родительское будущее.

Что такое будущее, зачем вам нужно оборачивать его и когда использовать в App Engine?

1 Ответ

1 голос
/ 02 марта 2010

Это java.util.concurrent.Future<V>. Связанный Javadoc довольно понятен и содержит пример. Для ленивых вот копия пасты:

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() в другом нить.

FutureWrapper - это просто декоратор для любого родителя Future.

...