SimpleDateFormat不是线程安全的。
SimpleDateFormat(下面简称sdf)类内部有一个Calendar对象引用,它用来储存和这个sdf相关的日期信息,例如sdf.parse(dateStr),sdf.format(date) 诸如此类的方法参数传入的日期相关String, Date等等, 都是交由Calendar引用来存储的。这样就会导致一个问题,如果多个线程共享sdf, 也就会共享这个Calendar引用, 并且, 观察 sdf.parse() 方法,你会发现有如下的调用:
Date parse() {
calendar.clear(); //1: 清理calendar
... //2: 执行一些操作, 设置 calendar 的日期什么的
calendar