1

在多线程环境中使用 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因为我找到了一个描述如何在多线程环境中使用的链接。不同步,因此在多线程环境中工作时可能会抛出.DateFormatDateFormatjava.lang.ArrayIndexOutOfBoundsException

但是我上面的方法已经是synchronized方法了。

我的问题是:

静态方法可以是synchronized方法吗?

我是否需要同步对象SimpleDateFormat而不是synchronized方法,为什么?

4

1 回答 1

3

上面显示的方法不访问任何共享状态(DateFormat 被创建为局部变量),因此您根本不需要同步

您需要找到与您的异常关联的堆栈跟踪。否则,这只是猜测。

于 2013-05-16T08:21:14.543 回答