[java] 쓰레드 풀과 스레드 로컬'

이번에는 자바에서 쓰레드 풀과 스레드 로컬에 대해 알아보겠습니다. 쓰레드 풀과 스레드 로컬은 다중 스레드 환경에서 자주 사용되는 개념으로, 효율적인 자원 관리와 스레드 간 정보 공유를 가능하게 합니다.

쓰레드 풀

쓰레드 풀은 미리 생성한 일정 개수의 스레드를 관리하고, 작업이 완료되면 해당 스레드를 재사용하는 메커니즘입니다. 이를 통해 자원을 효율적으로 활용하고, 스레드 생성 및 제거에 따른 오버헤드를 줄일 수 있습니다.

ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(() -> {
    // 작업 수행
});
executor.shutdown();

위의 예시에서 newFixedThreadPool은 5개의 스레드를 갖는 쓰레드 풀을 생성하고, submit 메서드를 통해 작업을 제출합니다. 작업이 완료되면 해당 스레드는 풀로 반환되어 재사용됩니다.

스레드 로컬

스레드 로컬은 스레드마다 독립적으로 값을 유지하는 메커니즘으로, 동일한 코드가 여러 스레드에서 실행될 때 각 스레드마다 별도의 값을 유지하기 위해 사용됩니다.

public class ThreadLocalExample {
    private static ThreadLocal<String> threadLocal = new ThreadLocal<>();

    public void setThreadLocalValue(String value) {
        threadLocal.set(value);
    }

    public String getThreadLocalValue() {
        return threadLocal.get();
    }
}

위의 예시에서 threadLocal은 각 스레드마다 별도의 값을 유지하기 위한 스레드 로컬 변수로, setThreadLocalValuegetThreadLocalValue 메서드를 통해 값의 설정 및 조회가 가능합니다.

결론

쓰레드 풀과 스레드 로컬은 다중 스레드 환경에서 자원 관리와 정보 공유를 효율적으로 처리하기 위한 강력한 도구입니다. 이를 올바르게 활용함으로써 성능 및 확장성이 더욱 향상될 수 있습니다.