【发布时间】:2010-08-22 06:06:43
【问题描述】:
而不是写下面的非线程安全方法。
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?
【问题讨论】:
标签: java concurrency thread-local