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);
}
来源:oschina
链接:https://my.oschina.net/u/131681/blog/212106