マルチスレッド環境で 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