我有一个日期对象,需要格式化它以进行缓存查找,simpledateformat不是线程安全的吗?

Bla*_*man 1 java spring datetime spring-mvc

在我的servlet中,当请求进来时,我创建了一个日期对象.

Date now = new Date();
Run Code Online (Sandbox Code Playgroud)

我想执行缓存查找,我需要创建一个帮助函数,将日期格式化为:

2012.04.24-10:34

这是: yyyy-MM-dd,HH:mm

我使用简单的日期格式:

public class DateHelpers {
      public static final DateFormat minuteDateFormat = new SimpleDateFormat("yyyy-MM-dd,HH:mm", Locale.US);

      public static String getDateKey(Date now) {
         // use minuteDateFormat to format date
      }
}
Run Code Online (Sandbox Code Playgroud)

但我正在阅读简单的日期格式不是线程安全的.

我没有将字符串解析为dateformat,所以也许有更好更快的方法来做到这一点?

我正在使用日期对象并将其格式化为字符串,并且它必须是线程安全的,因为许多请求将使用此DateHelper静态方法从日期获取密钥.

ddi*_*rov 5

退后一步,如果你真的要求性能,我会避免格式化日期,只需使用unix时间戳作为键(即System.currentTimeMllis()).如果要基于现有日期对象进行查找,date.getTime()则为您提供时间戳.

如果你想将它舍入到一分钟,你可以将它除以并乘以60,000 - 它的速度更快,保证线程安全.

对于格式化日期的情况,我通常要么根据需要创建日期格式(它不是那么昂贵),或者我有一个实用程序对象池,我明确地与每个工作者关联.

线程本地解决方案将起作用,但随着时间的推移,很容易失去对所有TL的跟踪,并最终得到更难以调试的代码.