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 @   阳阳天天开心  阅读(1067)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示