본문 바로가기

IT

SimpleDateFormat 사용시 java.lang.ArrayIndexOutOfBoundsException

반응형

 멀티 쓰레드의 부하가 많이 걸리는 부분에 SimpleDateFormat을 사용하여 날짜를 특정한 포맷으로 변환하는 과정에서 java.lang.ArrayIndexOutOfBoundsException 이 발생하는 경우가 종종 있다.


 부하가 많지 않은 경우에는 발생하지 않기는 하는데, 이유는 SimpleDateFormat이 none thread safe 하다는 것이 이유였다.


 다시 구글링하여 얻은 정보.


 위와 같은 이유로 이미 멋진 라이브러리가 이미 공개되어 있고, datetime과 관련된 다양한 메소드를 추가적으로 제공하는 Joda-Time 이라는 라이브러리를 찾을 수 있었다.


 사이트 링크 : http://joda-time.sourceforge.net/


 예외가 발생하던 코드


if (obj instanceof java.util.Date) {
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
	String datetime = sdf.format((Date) obj);
	System.out.print(datetime);
}


 수정된 코드


if (obj instanceof java.util.Date) {
	DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd hh:mm:ss");
	String datetime = dtf.print(((java.util.Date)obj).getTime());
	System.out.print(datetime);
}

 쓰레드 단위로 부하를 걸어 테스트 해보면 어느것이 더 안정적인지 한방에 눈에 들어온다. 끝.

반응형