在多线程环境中使用DateFormat时在哪里使用synchronized关键字?
我低于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
的地方,因为我找到了一个link来描述如何在多线程环境中使用DateFormat
。 DateFormat
未同步,因此在多线程环境中工作时可能会抛出java.lang.ArrayIndexOutOfBoundsException
。
但我的上述方法已经是synchronized
方法了。
我的问题是:
静态方法可以是synchronized
方法吗?
我是否需要同步SimpleDateFormat
而不是synchronized
方法的对象以及为什么?
答案 0 :(得分:3)
上面显示的方法不会访问任何共享状态(DateFormat是作为局部变量创建的),因此您无需同步 。
您需要找到与您的异常相关联的堆栈跟踪。否则只是猜测工作。