java - 为什么ThreadLocal 选择在线程中使用成员变量,而不是维护一个以线程为Key,值为value的集合?
阿神
阿神 2017-04-18 10:37:44
0
4
435
阿神
阿神

闭关修行中......

모든 응답(4)
大家讲道理

디자인에 따르면 ThreadLocalThread의 존재에 따라 존재해야 합니다. 각 스레드는 저장 공간을 가질 수 있으므로 두 번째 요점에 대해서는 매우 동의합니다. 이해할 수 있는.
디자인에 따라 mapThreadLocal을 넣으면 이 mapstatic(또는 ThreadLocal 싱글톤의 멤버 변수)에 속해야 하며 이는 디자인에 심각한 문제를 일으킬 수 있습니다. . , 이 map는 관리하기가 매우 어려울 것입니다:

으아악

디자인에는 일련의 방법과 철학이 있으므로 신중하게 음미해야 합니다.

黄舟

적어도 제가 생각할 수 있는 한 가지는:

상호 배제 비용 절감

다음 시나리오가 있습니다. DateFormat의 성능을 향상시키기 위해 일반적으로 ThreadLocal과 결합됩니다.

刘奇

일부 디자인은 때로는 성능만을 위한 것이 아닙니다. Java는 디자인 패턴에 가장 많은 관심을 기울이고 있으며 단일 책임은 디자인 패턴의 가장 중요한 원칙 중 하나라는 것을 알아야 합니다.
반면에 Map을 직접 사용하는 것보다 ThreadLocal에서 직접 Map을 구현하는 것이 더 빠르지 않을까요? 하지만 이는 분명히 단일 책임을 위반하고 유지 관리 비용이 더 많이 듭니다.

迷茫

ThreadLoad가 기본 데이터 구조로 Map<Thread, Object>를 직접 사용하는 경우, 많은 수의 스레드가 ThreadLocal을 사용하면 먼저 Map 액세스 성능이 저하됩니다. 스레드 수명 주기에 따라 기본 Map도 저하됩니다. 엔터티를 자주 추가하고 삭제하면 성능 병목 현상이 쉽게 발생할 수 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!