다음 스레드가 아닌 안전한 방법을 작성하는 대신.다음 경우에 ThreadLocal.remove를 호출해야합니까?
private static final Calendar calendar = Calendar.getInstance();
public void fun() {
// Going to call mutable methods in calendar.
}
나는 스레드 안전 버전으로 변경합니다. 대신 같은 스레드마다, 심지어 새로운 인스턴스를 생성하는
public void fun() {
final Calendar calendar = Calendar.getInstance();
// Going to call mutable methods in calendar.
}
, 내 세번째 접근을 위해
public void fun() {
final Calendar calendar = getCalendar();
// Going to call mutable methods in calendar.
}
/**
* Returns thread safe calendar.
* @return thread safe calendar
*/
public Calendar getCalendar() {
return calendar.get();
}
private static final ThreadLocal <Calendar> calendar = new ThreadLocal <Calendar>() {
@Override protected Calendar initialValue() {
return Calendar.getInstance();
}
};
으로 개선했다 호출 할 필요가있다
ThreadLocal.remove
?
그러나 Joshua Bloch는 SimpleDateFormat 예제에 ThreadLocal을 사용하는 것이 좋습니다. (Calendar, SimpleDateFormat 및 NumberFormat에 사용할 계획 임) - http://old.nabble.com/Threadlocals-and-memory-leaks-in-J2EE-td13097957.html#a13097957 –
하지만 아무 것도 없습니다! 최적화의 규칙 # 1 - 먼저 응용 프로그램 프로필. –
@ Yan Cheng'Calendar'는 구축하기에 상당히 저렴한 오브젝트 여야합니다. –