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
반응형
'개발일기 > Spring' 카테고리의 다른 글
[Spring]템플릿 메서드 패턴#1 (0) | 2024.04.01 |
---|---|
[Spring]로그 추적기 (0) | 2024.04.01 |
[Spring]@PostConstruct와@PreDestory (0) | 2024.03.21 |
[Spring]@autowired , @qualifier , @primary (0) | 2024.03.20 |
[Spring]@ComponentScan , @Component , @Autowired (0) | 2024.03.18 |