1

マルチスレッド環境で DateFormat を使用しているときに、synchronized キーワードを使用する場所は?

私は以下になっていますException

java.lang.ArrayIndexOutOfBoundsException: -1

コードを調べたところ、 を使用して Date をフォーマットするメソッドがあります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 に答える