1
在多線程環境中使用DateFormat時如何使用synchronized關鍵字?在多線程環境中使用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
。
但我上面的方法已經是方法。
我的問題是:
是靜態的方法可以是方法?
我需要同步SimpleDateFormat
而不是方法的對象嗎?爲什麼?
你可以看看這個http://www.javacodegeeks.com/2010/07/java-best-practices-dateformat-in.html –
你的案例中的SimpleDateFormat是一個局部變量,所以它是線程安全,因爲它是「線程本地」。順便說一下,該方法根本不需要「同步」。 – assylias
@assylias +1。謝謝 –