问题描述:
有两个项目,一个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怎么会发生多线程,先留着吧