靜態SimpleDateFormat對象使用併發狀況下致使時間錯亂

如今咱們不少項目都會有人定義對應的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

相關文章
相關標籤/搜索