http://blog.naver.com/lover4908/110039084541
바 1.5 버전 부터 쓰래드를 지원하기 위한 API가 강력해진거 같다.
모, 일단 라이브러리가 많이 늘어난거 같다. 래치, 배리어, 쓰레드풀 , 퓨처패턴 등등등......
나중에 필요할때 써 먹을라고, 관련되는 녀석 공부하던중에
자바 1.5부터 지원되는 쓰레드풀 생성하는 아주작은 샘플을 만들어 보았습니당~
/**
*
*/
package test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author 이준성
*
*/
public class ThreadPoolTest {
final static int THREADCOUNT = 10;
/**
* @param args
*/
public static void main(String[] args) {
// 쓰레드 풀 생성. THREADCOUNT 개수 만큼
ExecutorService exec = Executors.newFixedThreadPool(THREADCOUNT);
for(int i = 0 ; i<THREADCOUNT*2 ; i++) {
exec.execute(new TestThread());
}
// 쓰레드풀 생성하고 전부다 사용후에는 반드시 셧다운 해야함~
exec.shutdown();
}
// 테스트 쓰래드
public static class TestThread implements Runnable{
public void run() {
for(int i=1 ; i<= 100 ; i++) {
System.out.println(Thread.currentThread().getName() + " => "+i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
Executors.newFixedThreadPool(THREADCOUNT) 이 부분에 의해서 쓰레드 풀을 생성해서 풀을 넘겨 줍니다.
사실 이거말고도 Executors클래스로 생성할수 있는 쓰레드 풀이 3개가 더 존재하더군요.
캐쉬, 싱글익스큐트 등등.
Executors.newFixedThreadPool 이 녀석에 의해서 생성되는 쓰레드 풀은 작업이 하나하나 등록할때마다 새로운 쓰레드를 생성한다고 합니다.
작업을 등록하는 부분은 exec.execute(new TestThread()) 이 부분 입니다.
쓰레드 풀을 사용하지 않을 경우는 Thread를 상속받던가 Runnable을 구현해서 생성하고 스타트 했지만, 쓰레드풀에 작업을 등록하려면 Runnable 이녀석을 구현해서 인자로 넘겨 주기만 하면 됩니다.
또 모든 작업이 끝날시에는 셧다운을 해야하는데, 쓰레드 풀 특성을 곰곰히 생각해보시면, 쉽게 아실거라 생각이 듭니다.
쓰레드풀 자체에서 쓰레드 관리(?) 하기 위한 쓰레드가 생성이 되기 때문에, 셧다운을 해주셔야 합니다. 하지않으면~ 프로세스가 남아있더군요.
셧다운 하는 방식도 여러가지가 있더군요. 모두 끝낸후에 셧다운 및 강제종료등등
위에서 사용한 방식은 모두 끝낸후에 종료입니다. 아~ 그리고 셧다운후에 작업을 등록하면 익셉션이 발생한다고 합니다.
쓰레드풀에서 퓨터 패턴도 적용되어서~ 작업이 끝난 후에 결과값도 받을수 있습니다.
서브밋이라는 메소드를 사용하면 되더군요.
'소프트웨어 개발 > Java - Basic' 카테고리의 다른 글
자바 1.8 새기능, forEach문 이용해서 줄이기 (0) | 2014.11.01 |
---|---|
JDK 1.8 람다 형식 runnable구현 (0) | 2014.10.24 |
eclipse refactoring, 메서드 형식 다 고치기 (0) | 2014.10.21 |
Exception을 이용한 트랜잭션 익셉션 처리 (0) | 2014.10.21 |
DriverManager쓰는과정 (0) | 2014.10.20 |