如今咱們不少項目都會有人定義對應的DateUtils時間處理工具類,而後在類中定義了大量的SimpleDateFormat靜態格式化對象,在靜態方法中直接使用如下靜態格式化對象進行時間格式轉換處理,當多併發在調用同一個靜態方法時,靜態方法又使用了靜態域的格式化對象,那麼格式出來的日期就是不可預測的,返回的年份有時是萬年,有時是1年如: 5678-11-01,1-11-01等各類不可預測的時間;併發
錯誤使用代碼以下:工具
public static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); public static SimpleDateFormat dateFormatTODB = new SimpleDateFormat("yyyyMMdd"); public static SimpleDateFormat dateFormatMess = new SimpleDateFormat("yyyy/MM/dd"); public static SimpleDateFormat dataTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public final static SimpleDateFormat YMDHMS = new SimpleDateFormat("yyyyMMddHHmmss"); public static String formatyyyyMMddHHmmss(Date date) { String result = ""; try { result = YMDHMS.format(date); } catch (Exception e) { e.printStackTrace(); } return result; }
修改方式以下:code
不可在靜態方法使用公共的格式化對象便可;即在靜態方法中new出各自的格式化對象;orm