분류없음2014.04.16 17:23


java에서 thread를 사용할 때 걍 Thread를 사용하였는데 ExecutorService라고 병렬처리를 지원하는 아주 고상한넘이 있는줄 이제 알았다.  참내..

Thread와 달리 ExecutorService는 비슷한 작업을 하는 스레드를 병렬로 처리하고자 할 때 주로 사용될수 있겠다.

그리고 Thread와 다른 ExecutorService만의 특장점은 스레드의 처리 결과를 받아볼수 있다는것~! 졸 좋다.


ExecutorService concurrentService = Executors.newFixedThreadPool(5);

for(int i=0; i<5; i++) {

  concurrentService.submit(new MyThread("threa param"));

}

5개의 스레드풀을 갖는 병렬처리 ExecutorService를 만들고 MyThread라는 Callable<T>를 구현한 클래스 객체를 인자로 하여 submit을 수행한다.

submit순간 MyThread의 call메소드가 호출된다.

public class MyThread implements Callable<List<String>>

{

  public MyThread(String param) {

    ..

  }

  public List<String> call() throws Exception {

    ....

    return stringList; // List<String>형식의 결과값 리턴

  }

}

MyThread함수는 Callable<>를 implements해야 하며 리턴값은 지네릭을 통해 객체를 넘길수도 있다.


ExecutorService의 최대의 장점은 스레드 처리 결과값을 리턴받을 수 있다고 하였는데 그러기 위해서는 java.util.concurrent.Future라는 추상클래스의 도움을 받아야 한다.


List<Future<List<String>>> results = new ArrayList<Future<List<String>>>(); //결과를 리턴받을 객체를 생성

results.add(concurrentService.submit(new MyThread("threa param"))); // 스레드를 submit할 때 결과객체를 얻어냄.

List<String> ret = ((Future<List<String>>)results.get(0)).get(); // 결과객체로부터 결과값을 받음.


해당 결과객체(Future)로부터 결과값을 받






Posted by 삼스