Вместо написания следующего не поточно-безопасного метода.
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();
}
};
Для моего 3-го подхода есть ли необходимость вызывать ThreadLocal.remove
?