Java 자바에서 Thread 쓰레드 및 쓰레드 풀 ThreadPoolExecutor 사용 방법 - Whitmem
Java 자바에서 Thread 쓰레드 및 쓰레드 풀 ThreadPoolExecutor 사용 방법
Java 언어
2025-06-24 21:31 게시 9187fab720cb68997288

0
0
14
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
Java 언어에서 Thread 를 하나 새로 생성해서 실행하기 위해 Thread 를 상속한 클래스를 만들면 된다.
이 클래스는 기본적으로 run() 함수를 구현해야 하는데, 다음과 같이 구현할 수 있다.
static class th extends Thread{ @Override public void run() { while(true) { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("OK"); } } }
즉 Thread 를 상속받는 클래스를 생성한 뒤에 해당 클래스를 인스턴스화 한 뒤 .start() 로 쓰레드를 실행할 수 있다.
위 코드는 a, b 가 동시에 실행되는 것을 볼 수 있다.
이외 작업을 쓰레드 풀에 담아 순차적으로 처리할 수 있도록 하는 클래스가 있는데 바로 ThreadPoolExecutor이다. ThreadPoolExecutor 은 기본 생성자 인자로 활성 쓰레드 개수, 최대 쓰레드 개수, 유휴 시간, 유휴 시간 유닛, 블럭킹 큐 리스트를 순서대로 받는다.
ThreadPoolExecutor executor= new ThreadPoolExecutor(2, 4, 5, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
즉 기본 활성 쓰레드에 배치하여 작업을 수행하고 최대 쓰레드 개수까지 늘어날 수 있는 것이다. 위 executor 을 생성하면 원하는 작업을 대기열에 담아둘 수 있는데, 할당된 쓰레드 개수에 맞춰서 먼저 요청된 쓰레드가 실행되고 앞의 작업이 끝나면 다음 쓰레드가 순차적으로 실행된다.
쓰레드 실행을 요청하기 위해서 executor.execute(Runnable); 을 사용하면 된다. Runnable 은 implements 하면 되기 때문에, 클래스를 선언한 뒤 Runnable 을 implements 하여 run 을 구현한 다음 생성하여 사용하면 된다.
즉 위 코드에서, execute 되는 요청은 5개로 쓰레드 2개를 훨씬 초과하지만 우선 모두 대기열에 쌓인 다음, a, b 요청부터 차례로 실행한다. 쓰레드가 끝나면 다음 쓰레드가 실행된다. 진행 과정은 아래 결과를 보면 확인할 수 있다.
OK! [b] OK [a] OK [a] OK [b] OK [b] OK [a] OK [b] OK [a] OK [b] OK [a] OK [c] OK [d] OK [c] OK [d] OK [c] OK [d] OK [d] OK [c] OK [c] OK [d] OK [e] OK [e] OK [e] OK [e] OK [e] OK
댓글 0개
댓글을 작성하는 경우 댓글 처리 방침에 동의하는 것으로 간주됩니다. 댓글을 작성하면 일회용 인증키가 발급되며, 해당 키를 분실하는 경우 댓글을 제거할 수 없습니다. 댓글을 작성하면 사용자 IP가 영구적으로 기록 및 부분 공개됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.