일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 익명 객체 @transactional
- java 파티
- java 백준 1509
- javav 1676
- 백준 연결요소 자바
- ipfs singletone
- java 1238
- mongodb lookup
- java 1509
- kotiln functional interface
- Spring ipfs
- rabbitmq 싱글톤
- 백준 2252 줄세우기
- go
- kotiln const
- ipfs bean
- 안정해시
- java 팩토리얼 개수
- spring mongoTemplate
- kotiln const val
- 백준 1504 java
- spring mongodb
- 자바 백준 팩토리얼 개수
- Java Call By Refernce
- 백준 특정한 최단 경로
- nodejs rabbitmq
- spring mongodb switch
- 전략 패턴이란
- spring mongoTemplate switch
- 자바 1676
Archives
- Today
- Total
공부 흔적남기기
JAVA 자바 ThreadLocal 쓰레드 로컬이란 본문
728x90
반응형
ThreadLocal이란
각 쓰레드마다 저장소를 만들어 동시성 문제를 해결한다.
spring을 사용하다 보면 주로 Bean들을 주로 싱글톤으로 생성하기 떄문에 동시성 문제에 빠질 수 있다.
2개 이상의 쓰레드에서 동시에 싱글톤 객체를 접근하여 싱글톤 객체의 필드를 수정하게 되면 동시성 문제에 빠지게 된다.
이 때 이 문제를 해결하는 방법중 하나로 쓰레드 로컬을 사용한다.
쓰레드 로컬은 쓰레드마다 각 저장소를 만들어 해당 쓰레드에서만 사용할 수 있는 로컬 저장소를 생성한다.
따라서 쓰레드에서 싱글톤을 동시에 접근해 수정해도 각자 쓰레드의 저장소를 사용하므로 문제가 되지 않는다.
ThreadLocal 주의점
쓰레드로컬을 사용할 때 주의해야 할 것은 주로 WAS는 ThreadPool을 사용한다. 즉 Thread를 재사용하는데, Thread가 끝난 시점에 threadLocal에 있는 정보를 remove 해주지 않으면 해당 쓰레드가 재사용 될때 이전 엔드유저가 사용한 데이터가 남아 있어 데이터가 노출 될 수 있다. 따라서 ThreadLocal을 사용할때 Thread가 끝나면 인터셉터나 필터 혹은 직접 ThreadLocal을 비워주어야한다.
728x90
반응형
'프로그래밍 언어 > Java' 카테고리의 다른 글
Java Call by Value ? Call by Reference? (0) | 2023.11.29 |
---|---|
JAVA 자바 프로세스와 쓰레드 (0) | 2023.05.16 |
JAVA 자바 기본적인 배경지식 (0) | 2023.05.09 |
java string 문자열 뒤집기 reverse하기 (0) | 2022.01.15 |
java ArrayList.contains 헷갈리는 부분 (0) | 2022.01.15 |