Guava - 병렬 프로그래밍 Futures 상세 정보

Guava는 Java 병렬 프로그래밍 Future에 많은 유용한 확장을 제공합니다. 주요 인터페이스는 Listenable Future이고 Futures의 정적 확장을 빌립니다.
Future의 ListenableFuture로 계승하여 리셋 함수를 추가하여 스레드 연산이 끝날 때 값을 되돌려주거나 방법을 실행할 수 있습니다.
ListenableFuture에 콜백 함수를 추가하려면:
Futures.addCallback(ListenableFuture, FutureCallback, Executor)
여기서 Future Callback은 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 for Future 확장은 다음과 같습니다.
  • transform: ListenableFuture의 반환 값을 변환합니다
  • allasList: 여러 ListenableFuture를 통합하여 모든 Future가 성공할 때 여러 Future 반환값으로 구성된 List 대상을 되돌려줍니다.주: Future 중 하나가 실패하거나 취소되면 실패하거나 취소됩니다
  • successfulAsList: allasList와 비슷하지만 유일한 차이점은 실패하거나 취소된 Future 반환값을null로 대체하는 것이다.실패나 취소 절차에 들어가지 않습니다..
  • immediateFuture/immediateCancelledFuture: 반환할 값의 ListenableFuture를 즉시 반환합니다..
  • makeChecked: Listenable Future를 CheckedFuture로 변환합니다.CheckedFuture는 ListenableFuture로 여러 버전의 get 방법을 포함하고 검사 이상을 표시합니다.이렇게 하면 실행 논리에서 이상한 Future를 던질 수 있는 것을 만드는 것이 더욱 쉽다
  • JdkFutureAdapters.listenInPoolThread(future):guava는 JDK Future를 ListenableFuture로 변환하는 인터페이스 함수를 제공합니다.
  • 다음은 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());
    }
    
    
    공식 자료 홈페이지:https://awk.so/@code.google.com!/p/guava-libraries/wiki/ListenableFutureExplained
    지금까지 Guava - 병렬 프로그래밍 Futures에 대한 자료 정리, 후속 추가 추가 관련 자료 보충, 본 사이트에 대한 지원 감사합니다!

    좋은 웹페이지 즐겨찾기