版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/someby/article/details/90142101
目录
解决问题:java.lang.NumberFormatException: multiple points
解决问题:java.lang.NumberFormatException: multiple points
在实时广告流统计模块测试的时候,使用的是数据库连接池的方式,需要不断的操作数据库,但是当程序运行一会时就会出现上述的错误,接下来这篇文章将介绍如何解决这个问题。
出现问题的代码
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * FileName: DateUtils * Author: hadoop * Email: [email protected] * Date: 19-2-25 下午7:09 * Description:日期时间工具类 */ public class DateUtils { public static final SimpleDateFormat DATEKEY_FORMAT = new SimpleDateFormat("yyyyMMdd"); /** * 格式化日期key * @param dateKey * @return */ public static Date parseDateKey(String dateKey){ try{ return DATEKEY_FORMAT.parse(dateKey); }catch(ParseException e){ e.printStackTrace(); } return null; } }
出现问题的原因
日期格式是不同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的。
意思是说,SimpleDateFormat在多线程环境下,是线程不安全的,如果在多线程环境中共享了SimpleDateFormat的实例,比如在类似日期类中定义了一个全局的SimpleDateFormat对象,这样子肯定会出现上述的报错。
扫描二维码关注公众号,回复:
6226050 查看本文章
当然,根据官方文档,也给我们了两个解决这个问题方法。
解决方法
1.为每个线程创建独立的格式实例。
现在,就这个两个解决问题的思路。分别实现代码如下:
为每个线程创建独立的格式实例
//为每个线程创建独立的格式实例 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * FileName: DateUtils * Author: hadoop * Email: [email protected] * Date: 19-2-25 下午7:09 * Description:日期时间工具类 */ public class DateUtils { /** * 格式化日期key * @param dateKey * @return */ public static Date parseDateKey(String dateKey){ try{ SimpleDateFormat DATEKEY_FORMAT = new SimpleDateFormat("yyyyMMdd"); return DATEKEY_FORMAT.parse(dateKey); }catch(ParseException e){ e.printStackTrace(); } return null; } }
共用一个格式,但是外部代码进行同步
//共用一个格式,但是外部代码进行同步 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * FileName: DateUtils * Author: hadoop * Email: [email protected] * Date: 19-2-25 下午7:09 * Description:日期时间工具类 */ public class DateUtils { public static final SimpleDateFormat DATEKEY_FORMAT = new SimpleDateFormat("yyyyMMdd"); /** * 格式化日期key * @param dateKey * @return */ public synchronized static Date parseDateKey(String dateKey){ try{ return DATEKEY_FORMAT.parse(dateKey); }catch(ParseException e){ e.printStackTrace(); } return null; } }
但是,在自己的项目中选用哪一个方法比较好,还需要和自己的需求结合起来进行选择。在本项目中,由于涉及到多线程的创建与维护,如果是数据库链接太多,并且是链接时间很长,同步可能是更好的选择。