那些你无意间踩过的坑-Java版

1.ArrayList不是线程安全的,如果想要实现同步,可以使用:Collections.synchronizedList(List)将其包裹起来。

关于非安全的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/



你可能感兴趣的:(那些你无意间踩过的坑-Java版)