zoukankan      html  css  js  c++  java
  • java.lang.NumberFormatException: multiple points

    一直听说过SimpleDateFormat是线程不安全的,从没在项目中碰到过,最近一个项目的开发,总是偶偶遇到下图的报错,查了下才知道,是多线程引起,这里做个记录

    问题报错日志:

    背景:使用elasticsearch检索日志,因为某种原因,需要将检索的起止时间由字符串值转为long格式值;

    后来排查到,前端在点击一个柱状图的柱子下钻时,echarts事件没写对,默认所有柱子都会同时发一次下钻请求(但是参数用的一个,同时发了30个左右)

    getLongTime()方法如下:

     网上搜索,查到这个是因为SimpleDateFormat类是非同步,线程不安全的,打开源码找到了说明

    这是alibaba java 开发手册中描述的,眼拙,没重视......

    如何解决:

    方法一:不要在工具类中声明一个全局的SimpleDateFormat实例,把它放到方法中,每次使用的时候new 一个实例,除非需要在大批量的数据处理中使用它

    缺点:频繁new SimpleDateFormat对象,销毁对象,不好看......

    方法二:使用ThreadLocal保存每个线程的SimpleDateFormat对象

    public static ThreadLocal<SimpleDateFormat> safeSdf = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
    safeSdf.get().parse(timeStr)

    方法三:使用java8的DateTimeFormatter,源码提示了是thread-safe的

    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

  • 相关阅读:
    C#类继承情况下构造函数的执行过程
    vs快捷键大全(分类导航)
    vs常用快捷键
    Entity Framework实体无限循环问题
    entity framework实现left join功能
    理解requireJS-实现一个简单的模块加载器
    petshop4.0(王福朋)
    代码覆盖率工具 Istanbul 入门教程
    .net微信开发
    numpy的用法(一)
  • 原文地址:https://www.cnblogs.com/yb38156/p/13726339.html
Copyright © 2011-2022 走看看