자바

자바 스레드풀 ThreadPool : 스레드 풀 작업 생성과 작업 처리 요청

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


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

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

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

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

 

스레드 풀 작업 생성 :

 Runnable 이나 Callable 구현 클래스로 하나의 작업을 표현합니닷 

위 두 가지의 차이는 작업 처리를 완료한 후 리턴값이 있나 없나의 차이입니다.


Runnable 구현 클래스는 리턴값이 없습니다.

Runnable task = new Runnable() {
    @Override

    public void run() {

      //실행 코드

    }

}


Callable 구현 클래스는 리턴값이 있습니다.

Callable<T> task = new Callable<T> {

   @Override

    public T call() throws Exception {

      //실행 코드

       return T

    }

}


call() 의 리턴 타입은 implements Callable<T>에서 지정한 T타입입니다.

ex) String


스레드 풀의 스레드는 작업 큐에서 Runnable or Callable 객체를 가져와서

run() or call()을 실행.


스레드 풀 작업 처리 요청

ExecutorService의 작업 큐에 Runnable or Callable 객체를 넣는 행위를 말합니다.

ExecutorService는 작업 처리를 위해 메소드를 제공

리턴 타입 : void


메소드명(매개변수) : execute(Runnable command)

설명 : -Runnable을 작업 큐에 저장은 하지만 작업처리 결과를 받지 못합니다.

==========================================================

리턴타입          메서드명(매개변수)                   설명

Future<?>         submit(Runnable r)                   Runnable or Callable을 작업 큐에 저장

Future<V>        submit(Runnable r, V result)       리턴된 Future를 통해 작업 처리 결과 받음

Future<V>        submit(Callable<V> c)



execute()와 submit()은 차이점이 두가지 있음.

1. execute()는 리턴값 x

   submit()은 작업처리 결과 받도록 Future() 리턴

2. execute()는 작업 처리 중 예외 발생 시 스레드 종료 후 해당 스레드 스레드 풀에서 제거

 => 다른 작업 처리를 위해 스레드 풀은 새로운 스레드 생ㅇ성

  submit()은 스레드가 종료되지 않고 다음 작업을 위해 재사용


===> 스레드 생성 오버해더를 줄이기 위해 submit()을 사용하는 것을 추천


반응형