728x90
목차
- ThreadLocal이란
- ThreadLocal 사용 이유
- ThreadLocal 사용 방법
- ThreadLocal 유의 사항
1. ThreadLocal 이란
- ThreadLocal은 자바의 class이다. 멀티스레드 환경에서 사용되는 스레드마다 독립적인 변수를 가져 접근할 수 있게 한다. 그래서 한 스레드에 의해 읽고 쓰여진다.
2. ThreadLocal 사용 이유
- 싱글톤 패턴의 사용이나 static 객체의 사용에서 볼 수 있는 동시성 문제를 해결하고자 사용을 한다.
- 싱글톤이나 static 객체는 메모리에 하나만 올라가기 때문에 여러 번 호출하게 되면 메모리에 올라간 인스턴스의 반환 값이 달라지는 문제가 있다.
3. ThreadLocal 사용 방법
- ThreadLocal 객체를 생성한다.
- ThreadLocal.set() 메서드를 이용해서 현재 스레드의 로컬 변수에 값을 저장한다.
- ThreadLocal.get() 메서드를 이용해서 현재 스레드의 로컬 변수 값을 읽어온다.
- ThreadLocal.remove() 메서드를 이용해서 현재 스레드의 로컬 변수 값을 삭제한다.
예제
public class ThreadLocalExam_2 {
public static void main(String[] args) {
Thread first = new Thread(() -> {
System.out.println("first thread = " + Context.threadLocal.get());
Foo foo = new Foo("first thread = ");
foo.foo();
});
Thread second = new Thread(() -> {
System.out.println("second thread = " + Context.threadLocal.get());
Foo foo = new Foo("second thread = ");
foo.foo();
});
first.start();
second.start();
}
}
메소드
- set() : ThreadLocal에 값을 초기화
- get() : ThreadLocal에 있는 값을 가져오기
- remove() : ThreadLocal 값 제거
4. ThreadLocal 유의 사항
- ThreadLocal은 메모리 누수의 원인이 될 수 있다. Thread pool 환경에서 ThreadLocal을 사용하는 경우 변수에 보관된 데이터 사용이 끝나면 반드시 해당 데이터를 삭제해줘야 한다. 그렇지 않을 경우 재사용 되는 스레드가 올바르지 않은 데이터를 참조할 수 있다.
- ThreadLocal 사용 시 static으로 선언해야 한다.
'개발자 랩실 > 스프링&스프링부트' 카테고리의 다른 글
[Java] 싱글톤 패턴 (0) | 2022.02.26 |
---|---|
[Java] :: 더블 콜론 사용 이유 (0) | 2022.02.08 |
[Java] DB Connection Pool (DB 커넥션 풀 / DBCP) (0) | 2022.02.04 |
Spring Framework(스프링 프레임워크)란 (0) | 2022.01.31 |
댓글