次のスレッドセーフでないメソッドを記述する代わりに。
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か?