의심되는 점은 HashTable get() 메서드가 읽기 위해 동기화된다는 것입니다. 그러나이 제한은 ConcurrentHashMap에서 제거되었습니다. 그러나 동기화 된 블록 만 메모리의 최신 값에 액세스합니다. 만약 다른 스레드가 그것을 업데이트 한 다음 그 값을 로컬에 캐싱하면 케이스가 최신 값에 액세스합니다. Hows는 이렇게합니다. 추가 재진입 잠금은 동기화 된 블록과 같은 메모리에서 최신 값을 가져오고 업데이트합니다. 감사ConcurrentHashMap의 스레드 메모리 관리
답변
ConcurrentHashMap를위한 Javadoc이 꽤 분명하다
취득에서는 자신의 발병에 잡고 작업을 위해 가장 최근에 완료 한 업데이트의 결과를 반영합니다. (더 공식적으로, 주어진 키에 대한 업데이 트 작업을 맺는 일이 발생-전에 업데이트 된 값을보고 해당 키에 대한 모든 (null 이외의) 검색과 관계를.)
을 "이 발생-전에"텍스트 특히 java memory consistency의 동작을 나타냅니다.
감사합니다. 또한 요점은 읽기 작업을 동기화하거나 잠그지 않고 어떻게 최신 값을 가져올 수 있는지입니다. 내부적으로 사용되는 메커니즘이 무엇인지 의미합니다. – HariJustForFun
@HariJustForFun 소스가 JDK에 포함되어 있으므로이를 학습 할 수 있습니다. –
그러나 단지 동기화 블록이 당신이 잘못
메모리
의 최신 값에 액세스 :volatile
없이 잠금과 최신 값에 액세스 읽습니다. 보다 일반적인 용어로, Java 메모리 모델에 의해 정의 된 관계가 쓰기와 읽기 사이에 설정되기 전에
이 발생하는지 여부가 중요한 관심사입니다. ConcurrentHashMap
을 보장하기 위해 volatile
개의 변수를 사용하면 전에 발생합니다.
그건 오타였습니다. 내가 의미했던 바는 동기화와 동기가 없음을 의미했습니다. 하지만 답변에 많은 감사드립니다. 말이된다. – HariJustForFun
- 1. ConcurrentHashMap의 스레드
- 2. ConcurrentHashMap의 및 스레드 안전
- 3. 스레드 간 메모리 관리
- 4. 스레드 당 메모리 관리
- 5. JNI가/분리 스레드 메모리 관리
- 6. ConcurrentHashMap의
- 7. 삽입하는 동안 ConcurrentHashMap의 스레드 안전 문제
- 8. ConcurrentHashMap의 조작
- 9. 스레드 관리
- 10. Java의 스레드 관리
- 11. ConcurrentHashMap의 최신 뷰를 얻으려면 어떻게해야합니까?
- 12. Crystal XI 메모리 관리, C# 관리 코드
- 13. 안드로이드 스레드 관리
- 14. ConcurrentHashMap의 순회
- 15. 는 ConcurrentHashMap의
- 16. ConcurrentHashMap의 반복
- 17. 메모리 관리
- 18. 메모리 관리
- 19. 메모리 관리
- 20. 메모리 관리
- 21. 메모리 관리
- 22. 메모리 관리
- 23. 메모리 관리
- 24. 메모리 관리
- 25. ConcurrentHashMap의 KeySet 반복자가 threadsafe인가?
- 26. 누출 메모리 문제, 메모리 관리
- 27. 블로킹 프로세스로 작업하는 동안 스레드 및 메모리 사용량 관리
- 28. 자바 스레딩 메모리 관리 문제
- 29. GTK 3 스레드 관리
- 30. Grails 서비스에서 스레드 관리
기본적으로 java.util.concurrent 라이브러리가 메모리 일관성 보장을 제공하는지 여부는 질문입니까? –
예. 그것은 어리석게 들릴지도 모른다. 하지만 어디서나 읽지는 않았습니다. 그럼 그냥 확인해. – HariJustForFun
인터페이스에 대한 javadoc을 확인하십시오. ConcurrentMap – lbalazscs