调用Thread.currentThread()获取当前线程。
JDK提供了ThreadLocal,在一个线程中传递同一个对象。
ThreadLocal表示线程的“局部变量”,它确保每个线程的ThreadLocal变量都是各自独立的。
ThreadLocal适合在一个线程的处理流程中保持上下文(避免了同一参数在所有方法中传递)
使用ThreadLocal要用try … finally结构。
private static final ThreadLocal<Map<String, DateFormat>>
messageFormat = new ThreadLocal<Map<String, DateFormat>>(){
public Map<String, DateFormat> initialValue(){
return new HashMap<String, DateFormat>();
}
};
/**
* 获取线程局部变量
* @param dateFormat
* @return
*/
private static DateFormat getDateFormat(String dateFormat) {
Map<String, DateFormat> formatters = messageFormat.get();
DateFormat formatter = formatters.get(dateFormat);
if (formatter == null)
{
formatter = new SimpleDateFormat(dateFormat);
formatters.put(dateFormat, formatter);
}
return formatter;
}