SimpleDateFormat是线程不安全的,切忌切忌!

多线程方法中使用了共享变量SimpleDateFormat,报如下错误:

java.lang.NumberFormatException: multiple points  at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1084

原因:

解决:

在线程方法中,new SimpleDateFormat();

SimpleDateFormat是线程不安全的,切忌切忌!

时间: 2024-10-20 21:33:54

SimpleDateFormat是线程不安全的,切忌切忌!的相关文章

SimpleDateFormat 的线程安全问题与解决方案

SimpleDateFormat 的线程安全问题 SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类. 它允许格式化 (date -> text).语法分析 (text -> date)和标准化. 但是 SimpleDateFormat 并不是一个线程安全的类,在多线程并发访问下会出现问题.通过以下代码进行检验, public class ProveNotSafe { static SimpleDateFormat df = new SimpleDateForma

日期格式化:SimpleDateFormat【线程不安全】、FastDateFormat和Joda-Time【后两个都是线程安全】

SimpleDateFormat是线程不安全的,不能多个线程公用.而FastDateFormat和Joda-Time都是线程安全的,可以放心使用. SimpleDateFormat是JDK提供的,不需要依赖第三方jar包,而其他两种都得依赖第三方jar包. FastDateFormat是apache的commons-lang3包提供的 Joda-Time需要依赖以下maven的配置(现在最新版本就是2.10.1) <!-- https://mvnrepository.com/artifact/j

Java-JUC(十四):SimpleDateFormat是线程不安全的

SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但是由于它是线程不安全的,多线程公用一个SimpleDateFormat实例对日期进行解析.格式化都会导致程序出错,接下来就讨论下它为何是线程不安全的,以及如何避免. 问题复现 编写测试代码如下: private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public static void m

SimpleDateFormat非线程安全

以前没有注意过的问题呀! 留着 自己好好看看. 出自 :http://www.cnblogs.com/zemliu/p/3290585.html 1. 原因 SimpleDateFormat(下面简称sdf)类内部有一个Calendar对象引用,它用来储存和这个sdf相关的日期信息,例如sdf.parse(dateStr), sdf.format(date) 诸如此类的方法参数传入的日期相关String, Date等等, 都是交友Calendar引用来储存的.这样就会导致一个问题,如果你的sdf

SimpleDateFormat的线程安全问题

SimpleDateFormat在进行日期格式转换时用的很多,但是 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题  * <p>  * Date formats are not synchronized.  * It is recommended to create separate format instances for each thread.  * If multi

SimpleDateFormat非线程安全及解决办法

一. 为什么SimpleDateFormat不是线程安全的? Java源码如下: /** * Date formats are not synchronized. * It is recommended to create separate format instances for each thread. * If multiple threads access a format concurrently, it must be synchronized * externally. */ pu

SimpleDateFormat的线程安全问题与解决方案

SimpleDateFormat 是 Java 中一个常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题. 因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题,或者使用ThreadLocal, 也是将共享变量变为独享,线程独享肯定能比方法独享在并发环境中能减少不少创建对象的开销.如果对性能要求比较高的情况下,一般推荐使用这种方

《java多线程编程核心技术》----simpleDateFormat非线程安全

类simpleDateFormat主要负责日期的转换和格式化,但在多线程的环境中,使用此内容容易造成数据转换以及处理的不准确, 因为simpleDateFormat类并不是线程安全的. public class MyThread extends Thread { private SimpleDateFormat sdf; private String dateString; public MyThread(SimpleDateFormat sdf, String dateString) { su

NumberFormatException: multiple points

问题描述: 有两个项目,一个ssmp.一个性能数据提供perf-provider ,后者给前者提供rest api: 突然有一天,来了新需求,ssmp在短时间内需要发送大量的rest请求,请求中有一个 时间参数,传到后台做时间格式化时开始报错: 严重: Servlet.service() for servlet [dispatcher] in context with path [/storage-performance-provider] threw exception [Request pr