一般这种问题主要是因为SimpleDateFormat在多线程环境下,是线程不安全的,所以如果你在多线程环境中共享了SimpleDateFormat的实例,比如你在类似日期类中定义了一个全局的SimpleDateFormat对象,这样子肯定会出现上述的报错,比如你的代码是这样的

 package com.yongcheng.liuyang.utils;

 import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; /**
*
*
* @author Administrator
*
*/
public class DateUtils { private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); public static Date covertDateStrToDate(String dateStr){ try {
return format.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}

如果是上述代码,那么在多线程环境下,你可能会收到如标题所示的错误。

解决办法

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

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

 package com.yongcheng.liuyang.utils;

 import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; /**
*
*
* @author Administrator
*
*/
public class DateUtils { private static final String format = "yyyy-MM-dd"; //每一个线程
private static final ThreadLocal<SimpleDateFormat> threadLocal = new
ThreadLocal<SimpleDateFormat>(); public static Date covertDateStrToDate(String dateStr){
SimpleDateFormat sdf = null;
sdf = threadLocal.get();
if (sdf == null){
sdf = new SimpleDateFormat(format);
}
//
Date date = null;
try {
System.out.println("当前线程为:" + Thread.currentThread().getName());
date = sdf.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
} return date;
}
}

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

package com.yongcheng.liuyang.utils;
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;
/** * *  * @author Administrator * */public class DateUtils {
private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");public static Date covertDateStrToDate(String dateStr){try {return format.parse(dateStr);} catch (ParseException e) {e.printStackTrace();}return null;}}

java.lang.NumberFormatException: multiple points问题的更多相关文章

  1. java.lang.NumberFormatException: multiple points错误问题

    最近项目一直会出现时间转换报错,一直不知道是什么问题??? java.lang.NumberFormatException: multiple points     at sun.misc.Float ...

  2. 多线程出现 java.lang.NumberFormatException: multiple points

    多线程下导入数据,发现同一个文件每次导入成功的数据量都不一致,经检查,某些数据偶尔会报错  java.lang.NumberFormatException: multiple points 原因是导入 ...

  3. java.lang.NumberFormatException: multiple points 异常

    平时使用SimpleDateFormat的时候都是在单线程的情况下使用的,今天在改写别人的代码,发现每个类中都会写大量的SimpleDateFormat实例.作为一个程序特有的洁癖开始对代码进行优化. ...

  4. Java 异常: SimpleDateFormat java.lang.NumberFormatException: multiple points

    Java  SimpleDateFormat 是不支持多线程的.在不同线程同时用 一个 SimpleDateFormat  实例对象做日期装换,或抛出上面的 2 种 异常,所以 用到 SimpleDa ...

  5. Java—恶心的java.lang.NumberFormatException解决

    项目中要把十六进制字符串转化为十进制, 用到了到了Integer.parseInt(str1.trim(), 16):这个是不是后抛出java.lang.NumberFormatException异常 ...

  6. solr4.3 java.lang.NumberFormatException

    solr java.lang.NumberFormatException 现象:定时每天全量,每隔5分钟增量DIH从mysql导入数据 solr4j返回加过Id列表,一天偶然出现 java.lang. ...

  7. LoadRunner ERROR: java.lang.NumberFormatException

    Loadrunner中使用lr_xml_get_values()获取服务端返回的字符串LcsId,LcsId为double,需要将该值转换为 int 后传入下一次请求中. 报错如下:Error is ...

  8. java.lang.NumberFormatException: For input string: "1608020001 " 错误

    错误: java.lang.NumberFormatException: For input string: "1608020001 "    at java.lang.Numbe ...

  9. Exception in thread “main” com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String

    String json="A valid json"; Job job = new Gson().fromJson(json, Job.class); Exception in t ...

随机推荐

  1. 一个简单的使用Quartz和Oozie调度作业给大数据计算平台执行

    一,介绍 Oozie是一个基于Hadoop的工作流调度器,它可以通过Oozie Client 以编程的形式提交不同类型的作业,如MapReduce作业和Spark作业给底层的计算平台(如 Cloude ...

  2. Java之Jacob调用COM接口DLL-----------------------------------dm。dll

    用Java控制windows了,嗯,低层次按键模拟,可控制游戏,内存也不在话下. 一.环境介绍 1.myeclipse8.5 2.著名按键插件dm.dll  32bit.此插件实现COM接口,百度百科 ...

  3. 八、uboot 代码流程分析---board_init_f

    接着上一节,板子开始做前期初始化工作. 8.1 board_init_f Board_f.c (common) /* 板子初次初始化.boot_flags = 0 */ void board_init ...

  4. 打包pyinstaller

    安装:pip3 install pyinstaller 了解几个常用命令 参数 用处 -F 将程序打包成一个文件 -w 去除黑框 -i 添加程序图标 我们将需要打包的test.py文件放到桌面上,之后 ...

  5. vue学习起步:了解下

    渐进式 有这么一句话,vue是渐进式框架. 抽取“渐进式框架”和“自底向上增量开发的设计”这两个概念是什么?中的解释: 渐进式代表的含义是:主张(主张指使用时的硬性要求)最少.来个对比就知道什么叫主张 ...

  6. 使用CSS将图像对齐

    相对于<img>元素的align特性来说,越来越多的网页设计人员使用float属性来对齐图像.可以采用两种方式来实现对齐.为了确保文本不会与图像的边缘接触,我们经常会给图像增加一个外边距. ...

  7. 消息队列介绍和SpringBoot2.x整合RockketMQ、ActiveMQ 9节课

    1.JMS介绍和使用场景及基础编程模型     简介:讲解什么是小写队列,JMS的基础知识和使用场景     1.什么是JMS: Java消息服务(Java Message Service),Java ...

  8. java中的基本数据类型一定存储在栈中吗?

    首先说明,"java中的基本数据类型一定存储在栈中的吗?”这句话肯定是错误的. 下面让我们一起来分析一下原因: 基本数据类型是放在栈中还是放在堆中,这取决于基本类型在何处声明,下面对数据类型 ...

  9. jvm系列二、JVM内存结构

    原文链接:http://www.cnblogs.com/ityouknow/p/5610232.html 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemory ...

  10. PNG,JPEG,BMP,JIF图片格式详解及其对比

    原文地址:http://blog.csdn.net/u012611878/article/details/52215985 图片格式详解 不知道大家有没有注意过网页里,手机里,平板里的图片,事实上,图 ...