问题描述:

有两个项目,一个ssmp、一个性能数据提供perf-provider ,后者给前者提供rest api;

突然有一天,来了新需求,ssmp在短时间内需要发送大量的rest请求,请求中有一个

时间参数,传到后台做时间格式化时开始报错:

严重: Servlet.service() for servlet [dispatcher] in context with path [/storage-performance-provider] threw exception [Request processing failed; nested exception is java.lang.NumberFormatException: multiple points] with root cause
java.lang.NumberFormatException: multiple points


但是调试发现传过来的时间没问题,一时一头雾水,想看源码,觉得太费时间,结果在度娘上搜了下发现有同僚碰到过,说是:

多线程方法中使用了共享变量SimpleDateFormat,报如下错误:
 Java.lang.NumberFormatException: multiple points
 at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1084
原因:
SimpleDateFormat是线程不安全的,切忌切忌!
解决:
在线程方法中,new SimpleDateFormat();
 
例:
       SimpleDateFormat sdf = new SimpleDateFormat();

  而回顾自己的代码中确实有一个静态的SimpleDateFormat实例,至此问题明了。

  但还有一个问题: provider中的rest api怎么会发生多线程,先留着吧