那些你無心間踩過的坑-Java版

1.ArrayList不是線程安全的,若是想要實現同步,可使用:Collections.synchronizedList(List)將其包裹起來。 java

關於非安全的ArrayList與安全的實現能夠參見:http://www.oschina.net/code/snippet_70229_2425 安全

2.SimpleDateFormat也不是線程安全的,在多線程環境下,會出現問題,解決方法是使用ThreadLocal。即便將SimpleDateFormat設置爲static,也不可避免,由於這根本是徒勞的。--官方推薦爲每一個線程建立一個實例,但顯然這種方式比較浪費;但若是使用同步鎖機制,又會帶來性能問題。因此推薦使用ThreadLocal方式解決:一個線程裏的變量是不存在多線程的。 多線程

使用ThreadLocal解決:(也可使用JODA日期時間處理庫 /commons-lang 包中的 FastDateFormat 工具類來避免這些問題) 工具

private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static ThreadLocal local = new ThreadLocal<>();
protected synchronized Object initiaValue(){
	return new SimpleDateFormat(DATE_FORMAT);
}
public static DateFormat getDateFormat(){
	return (DateFormat)local.get();
}
public static java.util.Date pase(String textDate) throws ParseException{
	return getDateFormat().parse(textDate);
}
參考自:http://lilongfei1030.blog.163.com/blog/static/860152820136260822266/
相關文章
相關標籤/搜索