ExecutorService 인터페이스 ThreadPool (단일쓰레드) 사용하기
ExecutorService 인터페이스 ThreadPool (단일쓰레드) 사용하기
- ExecutorService 인터페이스 : Executor 인터페이스를 확장하며 라이프 사이클을 제어
- 집행자 인터페이스 : 작업과 쓰레드를 분리하고 실행을 담당
( void execute(Runnable task); )
// ExecutorService
private ExecutorService executorService;
public void insert...save(final DataVO datavo) {
/**
* 스레드 풀 생성.
* 스레드를 관리하기 위해 생성
* 스레드를 관리함으로써 매 스레드를 생성하고 소멸시킬 때 오버헤드를 줄일 수 있다.
* 백그라운드 스레드 때문에 발생하는 과부하를 방지한다.
* 스레드 풀 생명주기에 의해 제어한다.
* 스레드풀 생명주기는 스레드 실행 -> shutdown -> 중단 -> 풀과 큐가 비어짐 -> 정리 -> 종료
*/
executorService = Executors.newSingleThreadExecutor();
// single Thread 사용. 단일 쓰레드 사용으로 task가 차례대로 실행되고 스레드가 안전하다.
// 쓰레드를 사용하는 이유 - 동시성 요청에 대한 처리속도 증가.
// Runnable 클래스를 상속받아 run 메서드를 호출한다.
// 호출 시 스레드 풀 (executorService)의 execute 메서드를 호출한다.
Runnable task = new Runnable(){
@Override
public void run() {
for(int i=0; i<dataVO.getList().size(); i++){
DataBean dataBean = new DataBean();
dataBean = dataVO.getList().get(i);
testDAO.insertSave(dataBean);
}
}
};
try {
// thread 실행
executorService.execute(task);
} catch (Exception e) {
e.printStackTrace();
}
// 스레드 작업이 끝난 후 스레드 실행을 종료한다.
// 종료는 꼭 해야함. 하지 않을 경우 메모리 릭 발생 할 수 있음.
// shutdownNow 메서드는 실행중인 스레드에 관계없이 바로 종료
// shutdown 메서드는 스레드 실행이 끝난 후 종료.
executorService.shutdown();
}