2016-09-10 2 views
1

나는 잠시 동안 질문에 대한 내 머리를 긁적이고있다. 나는 주변을 둘러 보았지만 대답을 찾지 못했다. concurrencyLevel이지도의 capacity보다 큰 경우 어떻게 될지 알고 싶습니다.concurrencyLevel이 ConcurrentHashMap의 용량보다 큰 경우 어떻게됩니까?

기본적으로 둘 다 16으로 각 버킷에 잠금이 설정됩니다. capacity이 32이고 concurrencyLevel 16 인 경우 잠금 장치가 2 개의 버킷에 보관됩니다. 그러나 concurrencyLevel이 32이고 capacity이 16 일 때 어떻게됩니까?

capacity의 분포가 24 및 16과 같이 고르지 않으면 어떻게 될까요?

+0

을, 나는 이미 게시물에 댓글을 달았던 사람들을 태그 할 수 있습니다. – rd22

+0

그게 무슨 태그이고, @pings는 코멘트입니다. – EJP

+0

예! 하지만 그 사람들이 질문에 대해 언급하지 않고도 SO 커뮤니티의 모든 사용자를 태그 할 수 있습니까? @oleg이 작동합니까? – rd22

답변

5

특별한 일은 없습니다. ConcurrentHashMap의 문서를 확인 했습니까? "또한이 클래스의 이전 버전과의 호환성을 위해 생성자는 내부 크기 조정에 대한 추가 힌트로 예상되는 concurrencyLevel을 선택적으로 지정할 수 있습니다."힌트이지만 제한 사항은 아닙니다. 또한 concurrencyLevel : "동시에 업데이트되는 스레드 수. 구현시이 값을 크기 조정 힌트로 사용할 수 있습니다. "참고 :"수 있습니다. " 그래서 어떤 일이 생기면 크기가 달라집니다. 아마도.

자세한 구현 정보가 필요하면 소스 코드를 살펴보십시오. 사용할 수 있습니다. 자바 1.8에서는 다음과 같은 두 줄 contanis : 나는 그래서 당신은 Quora의 유사하지만 더 세련 즉각적인 응답 기능을 얻을 수 있도록 답을했을 아는 사람을 태그 할 수있는 기능이 있었으면 좋겠다 시간에

if (initialCapacity < concurrencyLevel) // Use at least as many bins 
     initialCapacity = concurrencyLevel; // as estimated threads 
+0

이것은 의미가 있습니다, 나는 소스에서 확인했지만 자바 7에서 일하고 있었고 자바 7에서는 명확하지 않았습니다. 너무 많은 내부 변수를 사용했습니다. Java 7이 비슷한 점이 있습니까? – rd22

관련 문제