在多线程环境中使用 DateFormat 时在哪里使用同步关键字?
我在下面Exception
:
java.lang.ArrayIndexOutOfBoundsException: -1
当我查看我的代码时,我有一个方法可以使用SimpleDateFormat
.
public static synchronized String now(String dateFormat) {
if (dateFormat.equalsIgnoreCase("")) {
dateFormat = "yyyy-MM-dd'T'HH:mm:ss";
}
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = null;
if (dateFormat == null || dateFormat.equalsIgnoreCase("")) {
sdf = new SimpleDateFormat();
} else {
sdf = new SimpleDateFormat(dateFormat, Locale.getDefault());
}
return sdf.format(cal.getTime());
}
虽然我无法重现异常,但这可能是我可能遇到的地方,java.lang.ArrayIndexOutOfBoundsException
因为我找到了一个描述如何在多线程环境中使用的链接。不同步,因此在多线程环境中工作时可能会抛出.DateFormat
DateFormat
java.lang.ArrayIndexOutOfBoundsException
但是我上面的方法已经是synchronized
方法了。
我的问题是:
静态方法可以是synchronized
方法吗?
我是否需要同步对象SimpleDateFormat
而不是synchronized
方法,为什么?