#68 스레드 그룹보다는 실행자와 작업을 사용하자
안드로이드에서도 looper 내에 queue가 있습니다.
이런 work queue를 직접 작성하려면 신경 쓸게 많은데 java.util.concurrent에서 제공하는 실행자 프레임워크(Executor Framework)를 이용하면 쉽게 만들 수 있습니다.
실행자와 작업을 이용한 구현 방법에 대해 알아보겠습니다.
아래와 같이 간단하게 구현할 수 있습니다.
Executors 클래스에서 제공하는 newSingleThreadExecutor static 메서드를 이용하면, 단일 스레드를 이용한 ExecutorService를 생성할 수 있습니다.
만약 하나 이상의 스레드를 통해 작업 큐의 작업들을 처리한다면 newFixedThreadPool 메서드를 통해 스레드 풀(thread pool)을 만들 수 도 있습니다.
스레드 풀 : 스레드를 미리 생성해 놓고 필요시 재 사용하는 방법
실행자 서비스(ExecutorService)에서 제공하는 API들을 통해 다른 작업들도 쉽게 구현할 수 있습니다.
shutdown : 종료
invokeAny, invokeAll : 작업이 완료되기를 기다림
awaitTermination : 실행자 서비스 종료 완료되기를 기다림
작업에는 Runnable과 Callable 두 가지가 있습니다.
Runnable은 void로 반환 타입이 없고, Callable은 Object로 반환 타입이 있습니다.
이 두 작업은 ExecutortService를 통해 실행(execute, submit)됩니다.
안드로이드에서도 HandlerThread나 AsyncTask 같은 Thread helper class들이 있듯이, 자바에서도 ExecutorService를 통해 좀 더 간편하게 Thread 작업들을 처리할 수 있습니다.