Programming
No. | 696 |
Name. | swindler |
Subject. | Executors Class |
Main Cate. | Java |
Sub Cate. | |
Date. | 2013-02-13 14:02 |
Hit. | 3003 (211.36.27.3) |
File. | |
JDK 1.5 이상 버젼에서 부터 등장한 concurrent package에 포함되었다. Executors 는 쓰레드풀을 이용하여 쓰레드를 보다 효과적이고 안전하게 사용하게끔 도와준다. Executors 에는 개발자들이 필요로 하는 대부분의 ExecutorService 들을 제공하는 static 펙토리 메소드를 제공하는데 그 외에 무언가 더 특별한 녀석을 만들고하 한다면 ThreadPoolExecutor 클래스를 직접 사용해도 된다. 제공하는 ExecutorService 에는 여러가지가 있다. 그중에서 중요한 4개 정도만 살펴보자. newCachedThreadPool newFixedThreadPool newScheduledThreadPool newSingleThreadExecutor 위의 펙토리 메서드들로 부터 반환되어 나오는 ExecutorService 을 살펴보면 쓰레드를 시작과 종료 시킬수 있는 메서드들이 존재한다. execute - 인자로 Runnable 를 구현한 객체를 받는다. submit - 인자로 Callable, Runnable 을 구현한 객체를 받을수 있다. shutdown - 쓰레드를 중단한다 현재 진행중인 작업은 중단되지 않는다. shutdownNow - 쓰레드를 당장 중단한다. 진행중인 작업도 함께 중단된다. isTerminated - 현재 작업이 끝났는지 여부를 반환해 준다. isShutdown - 현재 쓰레드가 중단되었는지 여부를 반환해 준다. 1. newSingleThreadExecutor 요녀석은 단일 쓰레드일 경우 사용된다고 한다. 한번 중단하면 다시 사용할수 없는 녀석이니 이부분을 염두해서 구현하도록 하자. ex) ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(new Runnable() { public void run() { ... 로직 구현 ... } }); executor.shutdown(); shutdown 은 꼭 시켜줘야 하며 shutdown 이 되지 않았을 경우 프로그램이 뻗어버리거나 잘못 수행되는 경우가 발생하게 된다. 잊지 말고 쓰레드를 모두 사용하였으면 shutdown 메소드로 쓰레드풀을 종료해줘야 한다. newFixedThreadPool newCachedThreadPool 펙토리 메서드들도 반환형을 보면 newSingleThreadExecutor 와 같은 ExecutorService 임으로 사용법은 마찬가지이다. 2. ExecutorService executor = Executors.newFixedThreadPool(10); newFixedThreadPool 의 경우 위와 같이 생성하며 정해진 갯수만큼만 Thread 를 생성하여 저장하고 있으며 모든 쓰레드가 사용되고 있는 상태에서 새로운 작업요청이 오더라도 최대 정해진 갯수 이상으로 쓰레드를 생성하지 않는다. 3. ExecutorService executor = Executors.newCachedThreadPool(); newCachedThreadPool 의 경우에는 쓰레드를 저장하고 있다가 들어오는 작업 요청에 따라 유연하게 쓰레드를 종료시키거나 생성 시킬수 있다. 노는 쓰레드가 많으면 알아서 판단하여 쓰레드를 종료하거나 반대의 경우 쓰레드를 생성하여 유연하게 작업을 수행한다. 가용한 프로세스보다 더 많은 양의 작업을 처리해야될 경우가 있을 경우 사용하지 않기를 권한다. 4. ScheduledExecutorService executor = Executors.newScheduledThreadPool(10); newScheduledThreadPool 의 경우 말 그대로 스케줄러 역활을 하며 일정시간 마다 주기적으로 반복하며 작업을 실행할수 있다. 반환형은 ScheduledExecutorService Interface 이고 scheduleAtFixedRate 메소드로 주기적인 반복을 시작할수 있다. executor.scheduleAtFixedRate(instance, 시작시간, 반복시간, 시간단위); ( instance 는 Runnable 을 구현한 객체이며 시간 단위는 TimeUnit Enum 에 선언되어있다. 요걸 가져다 쓰도록 한다. ) [바로가기 링크] : http://coolx.net/cboard/develop/696 |
|
|
|
[Modify] [Delete] | [Reply] [List] |