간단한 작업에서 정의 된 스레드 CallbackableFeatureTask (ListenableFutureTask의 구글 모방) 콜백 수 있습니다

1. 작업 상속 호출 가능, Runable

수입 java.util.concurrent.Callable;
수입 java.util.function.Consumer;

공공  클래스 CallbackableFeatureTask는 <V>는 구현 호출 가능 <V> ,의 Runnable을 {

    전용 호출 가능 <V> mainProcess;

    개인 소비자 <V> callbackFunction;

    @보수
    공공 V의 ()를 호출하면 발생 예외 {
        결과 V = mainProcess.call ();
        callbackFunction.accept (결과);
        반환 결과를;
    }

    공개 CallbackableFeatureTask (호출 가능 <V> 호출 소비자 <V> callbackFunction) {
          .mainProcess = 호출;
         .callbackFunction = callbackFunction;
    }

    @보수
    공공  무효 실행 () {
         시도 {
            요구();
        } 캐치 (예외 예) {

        }
    }
}

2. 시험 코드

공용  클래스 CallbackableFeatureTaskTest {
     개인  정적 ExecutorService를 ExecutorService를 Executors.newFixedThreadPool = (5 );

    공공  정적  무효 메인 (문자열 []에 args) {
        CallbackableFeatureTask <문자열> 작업 = 새로운 CallbackableFeatureTask <> (  호출 가능 <문자열> () {
            @보수
            공공 문자열 ()에 대한 호출이 발생 예외 {
                 반환 "안녕하세요 중국을!" ;
            }
        } (문자열 V) -> {
            에서 System.out.println (V);
        });

        // 직접 사용 스레드의 Runnable 1. 지원 
        새로운 새로운 스레드 (작업) .start ();

        // 주는, Callable 풀링 2. 지원 스레드 
        미래 <문자열> ExecutorService.submit 결과 = ((주는, Callable <문자열> ) 작업)
         은 try를 {
            에서 System.out.println ( "결과가 스레드 풀을 사용하여"+ result.get ());
        } 캐치 (예외 예) {

        }
        executorService.shutdown ();
   } 
}

 

결과는 다음과 같다 :

 

! 헬로 중국
헬로 중국!
그 결과는 스레드 풀 사용 : 안녕하세요 중국!

 

여기에 단지 교육 데모를하고있다

늦은 점을 최적화 할 수 있습니다 : 미래 <V가> 인터페이스 등 FutureTask을 상속 실현되는

추천

출처www.cnblogs.com/zhshlimi/p/11725614.html