티스토리 뷰
반응형
Hashtable, HashMap, ConcurrentHashMap 클래스들은 Map 인터페이스를 구현한 콜렉션들로,
각 콜렉션들이 비슷한 역할을 하는 것 같으면서도 다르게 구현되어 있다.
기본적으로는 Map 인터페이스이기 때문에 <key, value>구조를 가진다.
- Hashtable : Hashtable 은 put, get 과 같은 주요 메소드에 synchronized 키워드가 선언되어 있으며
또한 key, value 에 null 을 허용하지 않는다. - HashMap : HashMap 은 주요 메소드에 synchronized 키워드가 없으며,
또한 Hashtable 과 다르게 key, value 에 null 을 입력할 수 있다.
하지만 HashMap 도 아래와 같이 선언하면 Thread-safe 한 맵으로 사용이 가능하다.Map<String, Object> map = Collections.synchronizedMap(new HashMap<String, Object>());
- ConcurrentHashMap : ConcurrentHashMap 은 HashMap 을 thread-safe 하도록 만든 클래스이다.
하지만 HashMap 과는 다르게 key, value 에 null 을 허용하지 않으며,
또한 putIfAbsent 라는 메소드를 가지고 있다.
인증서에는 pem, public, private 키가 있는데인증서를 생성할 때 pem 키를 제외한
public, private 키는 데이터베이스에 저장되지 않고 사라진다.
하지만 사용자가 생성 완료 페이지에서 해당하는 3가지 키를 전부 다운로드 받을 수 있도록 해야하는데,
이 때 바로 thread-safe 한 ConcurrentHashMap 을 사용할 수 있다.
컨트롤러나 서비스에서 ConcurrentHashMap 을 선언해준 후,
ConcurrentHashMap<String, Object> certHashMap = new ConcurrentHashMap<>();
필요한 정보를 저장해주었다.
certHashMap.put(thingCertificateCreateRequestModel.getCertName(), responseModel.getData());
그런 다음 생성 완료 페이지에서 responseModel 에
앞서 저장했던 정보를 넣어준 후 clear 처리를 해주었다.
responseModel.setData(certHashMap.get(certName));
certHashMap.clear();
(참고 : docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html)
반응형
'Java' 카테고리의 다른 글
[Java] Timestamp 비교 (0) | 2021.02.10 |
---|---|
[Java] 객체 정렬 방법 (Collections.sort()) (0) | 2021.02.10 |
[Java] static 변수와 static 메소드 (0) | 2021.02.10 |
[Java] Enum class (0) | 2021.02.10 |
[Java] @Builder (0) | 2021.02.10 |