English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Dettagli di Guava - Panoramica della programmazione parallela Futures

Guava fornisce molte estensioni utili per la programmazione parallela di Java Future, il suo principale interfaccia è ListenableFuture e si avvale delle estensioni statiche di Futures.

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

对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扩展还有:

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

Ecco un esempio di demo di test per 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.");
      return 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.");
      return 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 {
      return 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());
}

Pagina principale dei materiali ufficiali:https://awk.so/@code.google.com!/p/guava-libraries/wiki/ListenableFutureExplained

Di seguito è la raccolta di materiali di Guava - Programming Parallel Futures, ulteriori materiali verranno aggiunti in seguito, grazie per il supporto della nostra piattaforma!

Dichiarazione: il contenuto di questo articolo è stato raccolto da Internet, il copyright è della proprietà del rispettivo proprietario, il contenuto è stato contribuito e caricato dagli utenti di Internet autonomamente, questo sito non possiede il diritto di proprietà, non è stato editato manualmente e non assume responsabilità per le relative responsabilità legali. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare un'e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare e fornire prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare