在工具类中有2个时间格式化和字符串转换成时间的函数,使用了类静态变量
SimpleDateFormat,具体代码如下:
public class Utils
{
public static SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
public static String getLocalTime(Date d)
{
Date tmp = d;
if (tmp == null)
tmp = new Date();
String ret = null;
ret = df.format(tmp);
return ret;
}
public static Date parse2Time(String date)
{
Date d = null;
try
{
if (date.length() == 8)
date = date + "000000";
d = df.parse(date);
}
catch (ParseException e)
{
LogUtils.Log(logger, e);
}
return d;
}
}
在多线程下使用时,报如下错误:
Exception in thread "Thread-11" java.lang.NumberFormatException: multiple points
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1084)
at java.lang.Double.parseDouble(Double.java:510)
at java.text.DigitList.getDouble(DigitList.java:151)
at java.text.DecimalFormat.parse(DecimalFormat.java:1303)
at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1936)
at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1312)
at java.text.DateFormat.parse(DateFormat.java:335)
后来将代码改成如下就好了:
public class Utils
{
public static String getLocalTime(Date d)
{
Date tmp = d;
if (tmp == null)
tmp = new Date();
String ret = null;
synchronized(df)
{
ret = df.format(tmp);
}
return ret;
}
public static Date parse2Time(String date)
{
Date d = null;
try
{
if (date.length() == 8)
date = date + "000000";
synchronized(df)
{
d = df.parse(date);
}
}
catch (ParseException e)
{
LogUtils.Log(logger, e);
}
return d;
}
}
分享到:
相关推荐
NULL 博文链接:https://flynndang.iteye.com/blog/711878
目录SimpleDateFormat诡异bug复现SimpleDateFormat诡异bug字符串日期转Date日期(parse)Date日期转String类型(format)SimpleDateFormat出现bug的原因如何解决SimpleDateFormat多线程安全问题局部变量使用...
高并发之-SimpleDateFormat类的线程安全问题和解决方案.docx
关于SimpleDateFormat的非线程安全问题及其解决方案.docx
SimpleDateFormat线程不安全的5种解决方案.md
SimpleDateFormat线程不安全的5种解决方案.docx
主要介绍了SimpleDateFormat的线程安全问题与解决方案,非常不错,具有参考借鉴价值,需要的朋友可以参考下
Java标准库中的一些类如ArrayList、HashMap和SimpleDateFormat,都是非线程安全的,在多线程环境下直接使用它们可能导致一些非预期的结果,甚至是一些灾难性的结果。一般来说,Java标准库中的类在其API文档中会说明...
主要介绍了Java多线程环境下SimpleDateFormat类安全转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
深入理解Java:SimpleDateFormat安全的时间格式化
有关SimpleDateFormat的常用方法说明
JavaScript实现的java.text.SimpleDateFormat。希望多多交流。
日期操作。。。基础的SimpleDateFormat格式化日期!!操作!》初级学习代码
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); date.setTime(time); System.out.println(sdf.format(date)); 发现时间于想要的时间不符,请运行Time.reg文件
由浅入深解析 SimpleDateFormat 由浅入深解析 SimpleDateFormat
主要介绍了Java SimpleDateFormat线程安全问题原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
SimpleDateFormat使用详解。非常实用!!!!
java 使用SimpleDateFormat类获取系统的当前时间 java 使用SimpleDateFormat类获取系统的当前时间
1.创建SimpleDateFormat对象,确定日期被格式化的格式 2.使用循环,在循环中调用Thread的sleep方法,让线程休眠1s后打印当前时间的字符串