Simpledate的线程安全代码

时间:2017-12-07 13:25:38

标签: java multithreading concurrency

请告诉我以下代码是否是线程安全的,以及我如何测试它:

      private static final SimpleDateFormat sdf = new SimpleDateFormat("MMddHHmmss");
     Calendar cal = new GregorianCalendar();
  TimeZone timezone = cal.getTimeZone();

     AppCalendar qCal = new AppCalendar(timezone);
    qCal.setDateToday();
    qCal.setTimeNow();


    }

public static String createTempName(final TimeZone timeZone) {
    final AppCalendar calendar = new AppCalendar(timeZone);
    calendar.setDateToday();
    calendar.setTimeNow();
    synchronized (sdf) {
        return sdf.format(calendar.getTime());
    }
}

我提到我的代码在JVM 7上运行,我必须使用此上下文提供的Date类型。遗憾的是,无法从Java 8中使用thred save LocalDate。我使用从createTempName方法返回的字符串作为数据库列中的唯一键。 appCalendar是扩展java.util.GregorianCalendar的类。

此致

1 个答案:

答案 0 :(得分:1)

是的,它是线程安全的。您可以在"Java DateFormat is not threadsafe" what does this leads to?中完成测试。如果性能是一个问题,我建议将同步更改为ThreadLocal,如同Making DateFormat Threadsafe. What to use, synchronized or Thread local