simpledatefomat报multiple points
欢迎使用Markdown编辑器
发现一个偶现的问题,后台报错显示simpleDateFormat的parse报错了。
明明传入的日期格式是正确的,为什么会报错。。。
后来搜索到问题,参考博客:
https://blog.csdn.net/EDG_win/article/details/106022657
处理办法
- 不将simpleDateFormat放在工具类或者提取为公共变量,每次使用前new一个即可。(相对消耗资源)
- 加入锁机制(并发能力下降)
- 使用ThreadLocal(推荐,每个线程只会创建一个simpleDateFormat)
使用ThreadLocal隔离创建simpleDateFormat
方法一:
private static final ThreadLocal<DateFormat> sdf = new ThreadLocal<DateFormat>(){
@override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
}
方法二:
private static final ThreadLocal<DateFormat> sdf = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));