java.lang.NumberFormatException: multiple points报错

记录一下今天出现的问题,前端页面点击本周或本月时,会报一个multiple points的错误,起初我以为是我后端接收与前端传的类型不符,后面查了一下才发现,是因为SimpleDateFormat在多线程环境下,是线程不安全的,所以我在多线程环境中public了SimpleDateFormat的实例,就因为定义了这个全局的SimpleDateFormat对象,才会出现这个问题。

 

给大家看段错误的实例代码

package com.cjxjy.ccs.prod.service.impl;


import java.text.SimpleDateFormat;
import java.util.*;


@Service
@Slf4j
public class ITbQualityOverviewServiceImpl implements ITbQualityOverviewService {
        
      Date date = new Date();

    SimpleDateFormat simpleDateFormat = new 
    SimpleDateFormat("yyyy-MM-dd HH:ss:mm");

    public static List<String> demo1(String stratDate,String endDate){
          // 示例代码1
   
}
    
    public Map<String, Object> demo2(String stratDate,String endDate){
           // 示例代码2
   
}    


}

这段代码我简化了,两个demo里如果都用到了这个SimpleDateFormat对象,那么就会报multiple points的错误,出现这种情况是在多线程的环境下

解决办法:

1、建议在每个方法中都new一个新的SimpleDateFormat对象,这样子就可以避免这种问题。

2、也可以使用保存线程局部变量的ThreadLocal对象来保存每一个线程的SimpleDateFormat对象,小编主要说说第二种的使用,针对上述代码做的改变。

注意:

  在多线程环境下,一定要注意共享变量的线程安全问题,如无特殊必要,建议不要随便定义静态公共变量,如果非要定义,建议考虑好多线程的问题!

posted @ 2023-01-30 18:29  阳阳天天开心  阅读(1514)  评论(0)    收藏  举报