SimpleDateFormat类在多线程环境下存在线程安全问题,因为SimpleDateFormat类中的实例变量calendar是非线程安全的,多个线程同时调用SimpleDateFormat的方法可能会导致线程安全问题。
为了解决SimpleDateFormat线程安全问题,可以使用以下两种方法:
private static final ThreadLocal<SimpleDateFormat> dateFormatThreadLocal = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
public String formatDate(Date date) {
SimpleDateFormat dateFormat = dateFormatThreadLocal.get();
return dateFormat.format(date);
}
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public synchronized String formatDate(Date date) {
return dateFormat.format(date);
}
以上两种方法都可以有效解决SimpleDateFormat线程安全问题,具体使用哪种方法取决于具体的需求和场景。