マルチスレッド環境で 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
を見つけたので、これはおそらく遭遇した可能性がある場所です。同期されていないため、マルチスレッド環境での作業中に.DateFormat
DateFormat
java.lang.ArrayIndexOutOfBoundsException
しかし、私の上記の方法はすでにsynchronized
方法です。
私の質問は:
静的メソッドはメソッドにすることができますsynchronized
か?
メソッドのSimpleDateFormat
代わりにオブジェクトを同期する必要がありますか?その理由は?synchronized