最近一個程序中,多線程調用sdf.format(date) ,經常獲得的時間錯誤,剛開始以爲是自己程序邏輯有問題 後來經過查閱資料,發現dateFormat不是線程安全的,因此 加上線程安全synchronized 後運行,正常
Java代碼
/**
* @author onedear
*
*/
public final class DateUtil {
private static DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static String dateToString(Date date) {
return sdf.format(date);
}
/**
* 返回天key
* @return
*/
public static Date getDayTime(Date date) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
}
那異常數據肯定是被其他線程修改了,最後改成
Java代碼
public static synchronized String dateToString(Date date) {
return sdf.format(date);
}
系統正常跑動。