ExecutorService 인터페이스 ThreadPool (단일쓰레드) 사용하기

가이드문구

ExecutorService 인터페이스 ThreadPool (단일쓰레드) 사용하기


- ExecutorService 인터페이스 : Executor 인터페이스를 확장하며 라이프 사이클을 제어

- 집행자 인터페이스 : 작업과 쓰레드를 분리하고 실행을 담당

( void execute(Runnable task); )



  1. // ExecutorService
  2. private ExecutorService executorService;
  3. public void insert...save(final DataVO datavo) {
  4. /**
  5. * 스레드 풀 생성.
  6. * 스레드를 관리하기 위해 생성
  7. * 스레드를 관리함으로써 매 스레드를 생성하고 소멸시킬 때 오버헤드를 줄일 수 있다.
  8. * 백그라운드 스레드 때문에 발생하는 과부하를 방지한다.
  9. * 스레드 풀 생명주기에 의해 제어한다.
  10. * 스레드풀 생명주기는 스레드 실행 -> shutdown -> 중단 -> 풀과 큐가 비어짐 -> 정리 -> 종료
  11. */
  12. executorService = Executors.newSingleThreadExecutor();
  13. // single Thread 사용. 단일 쓰레드 사용으로 task가 차례대로 실행되고 스레드가 안전하다.
  14. // 쓰레드를 사용하는 이유 - 동시성 요청에 대한 처리속도 증가.
  15. // Runnable 클래스를 상속받아 run 메서드를 호출한다.
  16. // 호출 시 스레드 풀 (executorService)의 execute 메서드를 호출한다.
  17. Runnable task = new Runnable(){
  18. @Override
  19. public void run() {
  20. for(int i=0; i<dataVO.getList().size(); i++){
  21. DataBean dataBean = new DataBean();
  22. dataBean = dataVO.getList().get(i);
  23. testDAO.insertSave(dataBean);
  24. }
  25. }
  26. };
  27. try {
  28. // thread 실행
  29. executorService.execute(task);
  30. } catch (Exception e) {
  31. e.printStackTrace();
  32. }
  33. // 스레드 작업이 끝난 후 스레드 실행을 종료한다.
  34. // 종료는 꼭 해야함. 하지 않을 경우 메모리 릭 발생 할 수 있음.
  35. // shutdownNow 메서드는 실행중인 스레드에 관계없이 바로 종료
  36. // shutdown 메서드는 스레드 실행이 끝난 후 종료.
  37. executorService.shutdown();
  38. }



작성자 소개
초이 프로필
WrapUp 블로거

초이

반려견을 좋아하고, 차를 좋아하고, 여행을 좋아하고, 맛집을 찾아 즐기는 웹 개발자 입니다^^