CS/언어

[JAVA] Hash와 Thread-Safe

pythaac 2022. 1. 19. 22:19

  현재 개발중인 코드에서 DB 데이터를 읽어 한 table의 정보를 바탕으로 HashMap의 mapping table을 저장하여 사용합니다. 그런데 이 table의 정보가 바뀔 수 있고, 그럴 때마다 다시 DB에 접근하는 것이 비효율적이라 생각하였습니다. 그래서 DB 정보가 바뀔 때마다 이 table도 같이 변경하도록 구현하였습니다.

  이 때 들었던 생각이 Thread-safe입니다. 현재는 table에 동시 접근하는 일이 없지만, DB와 sync를 맞추고 있는 이 테이블에서 동기화 처리하지 않으면 DB와 integrity가 깨질 수 있습니다. 그래서 제가 사용하는 자료구조가 동기화 처리를 하는지 확인해보아야했습니다.

 

HashMap은 unsynchronized

  현재 mapping table로 사용했던 클래스는 hashMap이었습니다. HashMap은 thread-safe하지 않은 비동기로 구현되어 있었습니다. 참고로, HashMap은 null도 사용할 수 있다고 합니다.

HashMap 설명에 unsynchronized로 표기
put 메서드 등 synchronized를 볼 수 없음

 

Hashtable은 synchronized

  반면 Hashtable은 메서드들이 synchronized로 선언된 것을 확인할 수 있었습니다.

Hashtable의 메서드들

 

현재 구현상 동기화를 신경쓸 필요는 없지만, 혹시 나중을 위해서라도 동기화로 처리하는 Hashtable을 사용해야겠습니다.