본문 바로가기

개발일기/Spring

[Spring]ThreadLocal

728x90
반응형

싱클톤 패턴으로 작업할때 제일 유의 해야하는것은

동시성문제이다. 

이러한 동시성 문제를 해결하기 위한 수단으로 ThreadLocal을 사용할 수 있다.

 

 

ThreadLocal이란 무엇인가?

ThreadLocal은 멀티스레딩 환경에서 각 쓰레드가 독립적으로 사용할 수 있는 저장 공간을 제공하는 Java API이다. 이는 각 쓰레드가 동일한 이름의 변수를 사용하더라도 서로 다른 값을 저장하고 관리할 수 있다는 것을 의미한다.

 

ThreadLocal 사용 이유:

  • 쓰레드 안전성: 공유 변수를 사용할 때 발생 가능한 경쟁 조건 (race condition) 을 방지한다.
  • 코드 간결성: 쓰레드별 데이터를 쉽게 관리하고 전달할 수 있다.
  • 메모리 효율성: 쓰레드가 사용하지 않는 데이터는 자동으로 제거되어 메모리 누수를 방지한다.

ThreadLocal 사용 방법:

1. ThreadLocal 변수 선언:

 

ThreadLocal<String> threadLocal = new ThreadLocal<>();

 

2. 값 설정:

threadLocal.set("Hello, world!");

 

3. 값 가져오기:

String message = threadLocal.get();

 

4. 값 제거:

threadLocal.remove();

 

ThreadLocal 예제 코드:

public class ThreadLocalExample {

    public static void main(String[] args) {
        ThreadLocal<String> threadLocal = new ThreadLocal<>();

        Thread thread1 = new Thread(() -> {
            threadLocal.set("Thread 1");
            System.out.println("Thread 1: " + threadLocal.get());
        });

        Thread thread2 = new Thread(() -> {
            threadLocal.set("Thread 2");
            System.out.println("Thread 2: " + threadLocal.get());
        });

        thread1.start();
        thread2.start();
    }
}

 

결과:

Thread 1: Thread 1

Thread 2: Thread 2

728x90
반응형