使用非常类似于在描述的模式最近的问题 ,为多线程应用程序,我越来越怪异的日期值(例如,几年如2025年到2035年,当清楚地没有这样的价值在源数据存在)。 看来,并发问题正在发生。
源代码如下所示
// Various Java DateFormat patterns, e.g. "yyyy-MM-dd".
private static final String[] DATE_PATTERNS = new String[] {...};
private static SimpleDateFormat[] getFormats(final String[] patterns)
{
ThreadLocal<SimpleDateFormat[]> LOCAL_FORMATS = new ThreadLocal<SimpleDateFormat[]>()
{
@Override
protected SimpleDateFormat[] initialValue()
{
List<SimpleDateFormat> formatList = new ArrayList<SimpleDateFormat>();
for (String pattern:patterns)
{
formatList.add(new SimpleDateFormat(pattern));
}
return formatList.toArray(new SimpleDateFormat[formatList.size()]);
}
};
return LOCAL_FORMATS.get(); // Create a thread-local copy
}
private static final SimpleDateFormat[] DATE_FORMATS = getFormats(DATE_PATTERNS);
其静态初始化后, DATE_FORMATS
阵列由许多类,后者又使用访问SimpleDateFormat
数组对象解析或格式化几个日期字符串。
能有这样的使用场景任何并发的问题,尤其是考虑到使用ThreadLocal
?