- 다음에는 더 안전한 코드를 작성하기 위해서 작성하는 회고...
- 멀티쓰레드 환경에서 해당 부분을 고려하지 못했다.
Before
ConcurrentMap<Object, DefaultCacheElementMetaData> concurrentMap = new ConcurrentHashMap<>(256);
Item item = new Item();
if (concurrentMap.contains(key)) {
concurrentMap.get(key).setItem(item);
}
After
- 해당코드를 다음과 같이 Thread-Safe하게 변경해야 한다.
- 만약 다른 Thread에서 concurrentMap을 clear 해줘도 해당 value는 가져오기 때문에 NullPointerException이 발생하지 않는다.
ConcurrentMap<Object, DefaultCacheElementMetaData> concurrentMap = new ConcurrentHashMap<>(256);
Item item = new Item();
Value value = concurrentMap.get(key);
if (value != null) {
value.setItem(item);
}