이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 27855|회답: 1

[출처] Java ThreadLocal 원칙과 다중 스레드 재사용은 데이터 혼잡을 초래합니다

[링크 복사]
게시됨 2021. 11. 1. 오전 11:45:36 | | | |
프로그래밍에서는 변수 내용을 전달하는 메서드 매개변수를 정의합니다. 실행 메서드 레벨이 깊으면 각 메서드가 전달할 매개변수를 정의해야 합니다. 이 시점에 일부 변수는 ThreadLocal을 통해 전달할 수 있습니다. 모든 메서드가 동일한 스레드에서 실행되면 ThreadLocal의 값을 설정하고 읽을 수 있습니다.

ThreadLocal 클래스는 스레드 내에서 로컬 변수를 제공하는 데 사용됩니다. 이 변수들이 다중 스레드 환경에서 접근(get/set)될 때, 각 스레드의 변수들은 다른 스레드의 변수들과 비교적 독립적입니다.

ThreadLocal은 설정된 메서드를 실행할 때 먼저 현재 스레드(Thread t = Thread.currentThread())를 받고, 현재 스레드를 사용해 ThreadLocalMap을 얻습니다. 맵이 비어 있지 않으면 현재 스레드에 이전에 바인딩된 맵을 가지고 있다는 의미이며, 그 값을 업데이트합니다. 그렇지 않으면 자신을 키로 사용하여 값을 맵에 넣어 변수와 스레드의 바인딩을 구현합니다.



코드를 테스트하고, 스레드 풀을 최대 5개의 스레드로 유지하도록 설정한 뒤, 멀티스레딩의 경우 ThreadLocal get 메서드를 호출하면 ThreadLocal 데이터를 얻게 됩니다 (다른 스레드가 설정한 데이터), 우리현재 스레드에서는 ThreadLocal set 메서드가 호출되어 데이터를 설정하지 않습니다, 아래 그림에서 볼 수 있습니다:



오류 원인:스레드가 재사용되면, ThreadLocal에서 얻은 첫 값은 이전 스레드에서 남은 값일 가능성이 큽니다

왜냐하면, 현재 스레드에서 ThreadLocal을 마친 후에는,적시에 삭제를 요청하세요。 아래에 나와 있습니다:



코드:

(끝)





이전의:Docker는 컨테이너 재시작 설정과 대량 정지 컨테이너를 살펴봅니다
다음:젠킨스 (5) 프로젝트 그룹 발표
게시됨 2021. 11. 2. 오후 9:30:12 |
다시 배우러 왔다.
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com