English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Guava предоставляет множество полезных расширений для Future в Java параллельного программирования,其主要接口为ListenableFuture,并借助Futures静态扩展。
ListenableFuture, наследующий от Future, позволяет нам добавлять функции回调 для выполнения после завершения вычислений или немедленного возврата при завершении выполнения метода.
Добавление функции回调 к ListenableFuture:
Futures.addCallback(ListenableFuture<V>, FutureCallback<V>, Executor)
FutureCallback — это интерфейс, который содержит onSuccess(V), onFailure(Throwable).
Использование, например:
Futures.addCallback(ListenableFuture, new FutureCallback<Object>() { public void onSuccess(Object result) { System.out.printf("onSuccess with: %s%n", result); } public void onFailure(Throwable thrown) { System.out.printf("onFailure %s%n", thrown.getMessage()); } });
В Guava также расширены Futures для Future:
ниже приведен пример теста для класса Future:
@Test public void should_test_furture() throws Exception { ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10)); ListenableFuture future1 = service.submit(new Callable<Integer>() { public Integer call() throws InterruptedException { Thread.sleep(1000); System.out.println("call future 1."); возврат 1; } }); ListenableFuture future2 = service.submit(new Callable<Integer>() { public Integer call() throws InterruptedException { Thread.sleep(1000); System.out.println("call future 2."); // throw new RuntimeException("----call future 2."); возврат 2; } }); final ListenableFuture allFutures = Futures.allAsList(future1, future2); final ListenableFuture transform = Futures.transform(allFutures, new AsyncFunction<List<Integer>, Boolean>() { @Override public ListenableFuture apply(List<Integer> results) throws Exception { возврат Futures.immediateFuture(String.format("success future:%d", results.size())); } }); Futures.addCallback(transform, new FutureCallback<Object>() { public void onSuccess(Object result) { System.out.println(result.getClass()); System.out.printf("success with: %s%n", result); } public void onFailure(Throwable thrown) { System.out.printf("onFailure%s%n", thrown.getMessage()); } }); System.out.println(transform.get()); }
Официальная страница материалов:https://awk.so/@code.google.com!/p/guava-libraries/wiki/ListenableFutureExplained
Вот так и была собрана информация о Guava - параллельное программирование Futures, продолжим дополнять соответствующую информацию, спасибо всем за поддержку нашего сайта!
Декларация: содержимое этой статьи взято из Интернета, авторские права принадлежат их законным владельцам, материалы предоставлены пользователями Интернета в порядке добровольного участия и загрузки, сайт не обладает правами собственности, не был подвергнут редактированию и не несет ответственности за юридические последствия. Если вы обнаружите материалы,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении и предоставьте соответствующие доказательства. При подтверждении факта нарушения, сайт незамедлительно удалят涉嫌侵权的内容.