SimpleDateformat 线程不安全
SimpleDateFormat 继承自 DateFormat, SimpleDateFormat中的parse方法override父类DateFormat的parse方法。DateFormat的父类提供了public setCalendar的方法 导致潜在的线程安全问题。
- parse方法不安全,使用了实例变量calendar. 当SimpleDateFormat设置为静态变量,多线程calendar发生变化,造成parse中的calendar变量发生了修改。
- format方法不安全,同样是calendar引起的。
解决方案一 jdk7 ThreadLocal
public class MyDateUtil { private static final ThreadLocal<DateFormat> threadSafeFormat = new ThreadLocal<DateFormat>(); private static final String MESSAGE_FORMAT = "MM-dd HH:mm:ss.ms"