자바

JAVA 자바 ThreadPool 자바 스레드 풀 : 콜백 방식 작업 완료 통보 CallBack

알통몬_ 2017. 3. 17. 22:22
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 


콜백이란 => 애플리케이션이 스레드에게 작업 처리 요청 후 스레드가 요청받은 작업을 완료하면

특정한 메소드를 자동 실행하는 기법을 말합니다.

이 때에 자동으로 실행되는 메소드를 콜백 메소드라고 하는 것입니다.

블로킹 방식과 콜백 방식 비교 


블로킹방식은 작업 처리 요청 후 작업이 완료될 때까지 블로킹 됨.

콜백 방식은 작업 처리 요청 후 결과를 기다릴 필요없이 다른 기능 수행 가능.

=> 작업 처리가 왼료되면 콜백 메서드가 실행되어 자동적으로 결과를 알 수있기 때문입니다.


ExecutorService에서는 별도로 콜백을 위한 메소드를 제공하지 않지만

Runnable 구현 클래스 작성 시 콜백 기능 구현 가능.

먼저 콜백 메소드를 가진 클래스가 있어야함.

직접 정의해도 되고, java.nio.channels.CompletionHandler를 이용해도 좋습니다. 

이 인터페이스는 NIO 패키지에 포함되어 있고, 비동기 통신에서 콜백 객체를 만들 때  사용됩니다. 


CompletionHandler 객체 생성 코드

CompletionHandler<V, A> callBack = new CompletionHandler<V, A>() {

    @Override

    public void completed(V result, A attachment) {

       //작업 처리가 정상적으로 완료됐을 경우 호출

    }

   @Override 

    public void failed(Throwable t, A attachment) {

     // 작업 처리 도중에 예외가 발생했을 경우 호출

   }


V 타입의 매개값은 결과값의 타입, A는 첨부 값의 타입.

첨부값이란 => 콜백 메서드에 결과값 이외에 추가로 전달하는 객체

첨부값이 없을 경우에는 Void로 지정


작업 처리 결과에 따라 콜백 메소드를 호출하는 Runnable 구현 객체

Runnable task = new Runnable() {

    @Override

    public void run() {
        try {

            V result = ~~~;

            callback.completed(result, null);

        } catch(Exception e) {

            callback.failed(e, null);

        }

    }

};


예제

이상입니다!

반응형