java SimpleDateFormat线程安全

来源:互联网 发布:美国大选重新计票 知乎 编辑:程序博客网 时间:2024/06/01 10:11
java SimpleDateFormat 线程安全问题
程序测试:

无问题,模拟tomcat环境,使用多线程请求报错java.lang.NumberFormatException.forInputString

,排查为SimpleDateFormat线程安全问题,SimpleDateFormat类内部有一个Calendar对象引用,它用来储存和这个sdf相关的日期信息,例如sdf.parse(dateStr), sdf.format(date) 诸如此类的方法参数传入的日期相关String, Date等等, 都是交友Calendar引用来储存的.这样就会导致一个问题,如果你的sdf是个static的, 那么多个thread 之间就会共享这个sdf, 同时也是共享这个Calendar引用,多线程同时调用static SimpleDateFormat,会导致某些线程的calendar数据被清空了,从而导致报错
问题处理:
静态static SimpleDateFormat tmp = new SimpleDateFormat("yyyyMMddHHmmss")方法改成SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"),new SimpleDateFormat对象性能影响不大;或者改成单列模式。
原创粉丝点击