Kotlin What was the ConcurrentHashMap?
사용 언어: Kotlin 2.3.10
ConcurrentHashMap(컨커런트 해시 맵)은 멀티 스레드 환경에서도 안전하게 결과가 보장되는 자료형입니다.
그래서 동시에 발생한다는 뜻의 Concurrent가 붙은 것이죠.
아래는 공식 문서입니다. Java에 존재하는 Class입니다.
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html
코틀린 What was the ConcurrentHashMap을 알아보겠습니다.
ConcurrentHashMap(컨커런트 해시 맵)은 멀티 스레드 환경에서도 안전하게 결과가 보장되는 자료형입니다.
그래서 동시에 발생한다는 뜻의 Concurrent가 붙은 것이죠.
아래는 공식 문서입니다. Java에 존재하는 Class입니다.
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html
많은 함수 중에서 Atomically(아토미컬리)가 붙은 함수만 같이 보겠습니다.
Atomically는 원자성을 나타내며 보통 저런 단어가 쓰이면 멀티 스레드 환경에서도 보존된다 보시면 됩니다.
putIfAbsent를 봅시다.
putIfAbsent는 값이 없으면 null(널)을 반환하며 동시에 ConcurrentHashMap에 값을 put 합니다.
만약 값이 있다면 put(풋)을 하지 않습니다.
다음은 remove입니다.
Remove(리무브)는 Key(키) Value(값)이 완전히 일치하지 않으면 false(폴스)를 반환하며 삭제를 하지 않습니다.
정확한 key와 value를 넣으면 삭제를 하며 true를 반환합니다.
다음은 Replace입니다.
이 replace(리플레이스)는 key와 value 값 그리고 새로운 vlaue 값을 적어줍니다.
key와 value가 일치하지 않으면 false를 반환하며 아무 작업도 하지 않고, 일치하면 새로운 value 값으로 변경을 하며 true(트루)를 반환합니다.
다음은 다른 parameter(파라미터)를 받는 replace입니다.
이 replace는 key 만으로 값을 바로 변경해 버립니다.
Return(리턴) 값은 key가 존재하면 변경되기 전의 값을 반환하며 값을 변경하고, key가 없으면 null을 반환합니다.
다음은 computeIfAbsent입니다.
computeIfAbsent는 해당 key가 없으면 값을 넣고 그 값을 반환하며, key가 있으면 기존에 있는 value를 반환합니다.
다음은 computeIfPresent입니다.
computeIfAbsent와 다르게 computeIfPeresent는 key가 존재할 때만 작동합니다.
없는 key를 넣으면 null(널)을 반환하고, 있는 값을 넣으면 이전에 있는 값에 원하는 동작을 할 수 있습니다.
여기서는 _world라는 글자를 더하는 작업을 하였습니다.
compute가 끝나면 ConcurrentHashMap에는 값이 저장됩니다.
다음은 compute(컴퓨트)입니다.
값이 없으면 value에 null이 나옵니다. 그래서 null_double이 되는 거죠.
그다음에 값이 있으면 해당 값이 value에 들어갑니다.
계산된 값은 ConcurrentHashMap에 들어갑니다.
그리고 compute의 반환값은 계산된 값이 나옵니다.
다음은 merge입니다.
merge(머지)는 key와 value를 적어주고, 람다식에는 원래 있는 값 string1, 새로 넣는 값 string2가 반환됩니다.
없는 key를 넣으면 그냥 새로운 값을 ConcurrentHashMap에 집어넣습니다. 그래서 hello가 아닌 hi가 들어가는 거죠.
값이 있으면 string1에는 기존 값, string2에는 새로운 값이 들어갑니다.
그래서 결과는 hi_double이 됩니다. 반환값은 들어가게 되는 값이 반환됩니다.
이렇게 atomically 한 함수들을 살펴보았습니다.
이러한 함수들은 Thread safe 하기 때문에 Multi thread에서 적절히 사용해 주면 정합성을 보장할 수 있습니다.
끝.
카테고리: Android, Kotlin
















댓글
댓글 쓰기
궁금한 점은 댓글 달아주세요.
Comment if you have any questions.