请告诉我以下代码是否是线程安全的,以及我如何测试它:
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的类。
此致
答案 0 :(得分:1)
是的,它是线程安全的。您可以在"Java DateFormat is not threadsafe" what does this leads to?中完成测试。如果性能是一个问题,我建议将同步更改为ThreadLocal,如同Making DateFormat Threadsafe. What to use, synchronized or Thread local。