Вместо того, чтобы записывать следующий безопасный метод, не связанный с потоком.Мне нужно вызвать 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();
}
};
Для моего 3-го подхода, есть ли необходимость позвонить ThreadLocal.remove
?
Но, Джошуа Блох даже предлагает использовать ThreadLocal для примера SimpleDateFormat. (Я планирую использовать для Calendar, SimpleDateFormat и NumberFormat) - http://old.nabble.com/Threadlocals-and-memory-leaks-in-J2EE-td13097957.html#a13097957 –
Но ничего! Правило №1 оптимизации - сначала укажите ваше приложение. –
@ Ян Чэн «Календарь» должен быть довольно дешевым объектом для построения. –