ConcurrentHashMap의 forEach 메소드는 스레드로부터 안전합니까? [복제]
Jan 05 2021
ConcurrentHashMap의 모든 요소를 반복하려면 forEach
스레드로부터 안전한 메서드를 사용하고 있습니까?
답변
1 JohnKugelman Jan 05 2021 at 11:08
스레드 안전성이 의미하는 바에 따라 다릅니다.
forEach
통화 중에 다른 스레드가 맵을 수정할 수 있어도 괜찮다면 스레드로부터 안전합니다.forEach
진행중인 동안 맵 을 수정할 수 없게하여 다른 스레드가 차단되거나 수정을 시도하면 오류가 발생하도록하려면 아니요, 그렇지 않습니다.
API 문서는 말합니다 :
그러나 모든 작업이 스레드로부터 안전하더라도 검색 작업에는 잠금이 수반되지 않으며 모든 액세스를 방지하는 방식으로 전체 테이블을 잠그는 기능이 지원되지 않습니다.
...
마찬가지로 반복기, 분할기 및 열거는 반복기 / 열거 생성 시점 또는 생성 이후의 특정 시점에서 해시 테이블의 상태를 반영하는 요소를 반환합니다. 그들은 던지지 않습니다
ConcurrentModificationException
.... 집계 상태 메소드의 결과는 ... 일반적으로 맵이 다른 스레드에서 동시 업데이트를 수행하지 않는 경우에만 유용합니다. 그렇지 않으면 이러한 방법의 결과는 모니터링 또는 추정 목적에 적합 할 수 있지만 프로그램 제어에는 적합하지 않은 과도 상태를 반영합니다.