Java에서 쓰레드와 ExecutorService

Lee·2023년 6월 1일
0

쓰레드란?

쓰레드는 프로세스 내에서 실제로 작업을 수행하는 실행 단위입니다. 쓰레드를 이용하면 하나의 프로세스 내에서 여러 작업을 동시에 처리할 수 있습니다. 이를 통해 CPU 사용률을 최적화하고, 자원을 효율적으로 사용할 수 있습니다.

쓰레드를 생성하는 방법

자바에서 쓰레드를 생성하는 주요 방법은 두 가지입니다:
1. Thread 클래스를 상속받아 run() 메서드를 오버라이드하는 방법
2. Runnable 인터페이스를 구현하는 방법

두 경우 모두, run() 메서드에 쓰레드가 수행할 작업을 정의합니다. Thread 클래스의 start() 메서드를 호출하면 새로운 쓰레드가 시작되고, 해당 쓰레드에서 run() 메서드가 호출됩니다.

쓰레드의 단점

만약 쓰레드의 생성 개수가 무수히 많이 늘어나게 될 경우, 쓰레드가 서버에 처리 단위가 많아지게 되어 서버에 과부화가 발생할 수 있습니다. 이를 해결하기 위해, 쓰레드 풀을 이용하여 서버의 과부화를 줄일 수 있습니다.

ExecutorService란?

ExecutorService는 쓰레드 풀을 관리하는 인터페이스입니다. 쓰레드 풀은 미리 생성된 쓰레드의 집합으로, 이를 재사용함으로써 쓰레드 생성과 소멸에 따른 비용을 줄일 수 있습니다. ExecutorService는 작업을 쓰레드에 배치하고, 쓰레드의 생명 주기를 관리합니다.

ExecutorService의 주요 메서드 중 하나는 execute()로, Runnable 객체를 인수로 받아 쓰레드 풀에서 처리하도록 합니다.

ExecutorService와 함께 쓰레드를 사용하는 방법

Executors 클래스의 여러 팩토리 메서드 중 하나를 이용하여 ExecutorService 인스턴스를 생성합니다. 이를테면, Executors.newFixedThreadPool(n) 메서드는 크기가 고정된 n개의 쓰레드를 가진 쓰레드 풀을 생성합니다.

그런 다음, execute() 메서드를 사용하여 Runnable 객체를 쓰레드 풀에 제출합니다. 이때, Runnable 객체의 run() 메서드는 쓰레드 풀의 쓰레드 중 하나에서 실행됩니다.

ExecutorService executorService = Executors.newFixedThreadPool(10);
executorService.execute(new MyRunnable());

이렇게 ExecutorService를 사용하면, 쓰레드 생명 주기를 직접 관리하지 않고도 쓰레드를 효과적으로 활용할 수있습니다.

profile
잡다한 개발자

0개의 댓글