Guava

家电修理 2023-07-16 17:23www.caominkang.com电器维修

Guava为Java并行编程Future提供了很多有用扩展,其主要接口为ListenableFuture,并借助于Futures静态扩展。

继承至Future的ListenableFuture,允许我们添加回调函数在线程运算完成时返回值或者方法执行完成立即返回。

对ListenableFuture添加回调函数

Futures.addCallback(ListenableFuture, FutureCallback, Executor)

其中 FutureCallback是一个包含onSuess(V),onFailure(Throable)的接口。

使用如

Futures.addCallback(ListenableFuture, ne FutureCallback() {

  public void onSuess(Object result) {
 System.out.printf("onSuess ith: %s%n", result);
  }

  public void onFailure(Throable thron) {
 System.out.printf("onFailure %s%n", thron.getMessage());
  }
});



Guava中Futures对于Future扩展还有

  1. transform对于ListenableFuture的返回值进行转换。
  2. allAsList对多个ListenableFuture的合并,返回一个当所有Future成功时返回多个Future返回值组成的List对象。注当其中一个Future失败或者取消的时候,将会进入失败或者取消。
  3. suessfulAsList和allAsList相似,唯一差别是对于失败或取消的Future返回值用null代替。不会进入失败或者取消流程。
  4. immediateFuture/immediateCancelledFuture 立即返回一个待返回值的ListenableFuture。
  5. makeChecked: 将ListenableFuture 转换成CheckedFuture。CheckedFuture 是一个ListenableFuture ,其中包含了多个版本的get 方法,方法声明抛出检查异常.这样使得创建一个在执行逻辑中可以抛出异常的Future更加容易
  6. JdkFutureAdapters.listenInPoolThread(future): guava提供了将JDK Future转换为ListenableFuture的接口函数。

下边是一个对于Future的测试demo

@Test
public void should_test_furture() thros Exception {
  ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.neFixedThreadPool(10));

  ListenableFuture future1 = service.submit(ne Callable() {
 public Integer call() thros InterruptedException {
   Thread.sleep(1000);
   System.out.println("call future 1.");
   return 1;
 }
  });

  ListenableFuture future2 = service.submit(ne Callable() {
 public Integer call() thros InterruptedException {
   Thread.sleep(1000);
   System.out.println("call future 2.");
  // thro ne RuntimeException("----call future 2.");
   return 2;
 }
  });

  final ListenableFuture allFutures = Futures.allAsList(future1, future2);

  final ListenableFuture transform = Futures.transform(allFutures, ne AsyncFunction, Boolean>() {
 @Override
 public ListenableFuture apply(List results) thros Exception {
   return Futures.immediateFuture(String.format("suess future:%d", results.size()));
 }
  });

  Futures.addCallback(transform, ne FutureCallback() {

 public void onSuess(Object result) {
   System.out.println(result.getClass());
   System.out.printf("suess ith: %s%n", result);
 }

 public void onFailure(Throable thron) {
   System.out.printf("onFailure%s%n", thron.getMessage());
 }
  });

  System.out.println(transform.get());
}



官方资料主页https://ak.so/@code.google.!/p/guava-libraries/iki/ListenableFutureExplained

Copyright © 2016-2025 www.caominkang.com 曹敏电脑维修网 版权所有 Power by