SimpleDateFormat,你线程不安全
????? 由于项目是运行在多线程环境下的,SimpleDateFormat对于日期的转换就出问题了。昨天测试部邮件通知我们日志的开始时间大于结束时间的时候我头都大了。经查找,发现是由于SimpleDateFormat线程不安全引起的。哎,以前一直在用这个类,从来没关注过。
现将测试代码发上。
?
两个线程:
import java.text.ParseException;import java.util.Date;public class Thread2 implements Runnable{private Main main; public Thread2(Main main){ this.main = main; } public void run() { for(;;){ try {main.foo2(new Date(), new Date());} catch (ParseException e) {e.printStackTrace();} } }}?
????? 如上,如果Main类中foo方法使用静态常量sdf进行转换很多错误的打印语句。如果使用ThreadLocal类绑定SimpleDateFormat则可以解决线程不统一的问题。
??????? 当然使用Apache提供的类DateFormatUtils以及DateUtils类进行日期的转换也可以解决线程的问题,如foo2方法。