[220620] Java Code 회고

archymi·2022년 6월 20일
1
  • 다음에는 더 안전한 코드를 작성하기 위해서 작성하는 회고...
  • 멀티쓰레드 환경에서 해당 부분을 고려하지 못했다.

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);
}

0개의 댓글