用SimpleDateFormat把字符串转换成Date的时候报NumberFormatException

问题描述

今天用for循环产生多条线程去缓存里面取数据,数据就是字符串形式的日期,我如果用for循环连续的产生线程去取的话,就会报NumberFormatException,有些时候说 For input string: "",有些时候说 multiple points ,还有些会更怪,类似于For input string: "112011.E112011E44" 这样的log,但当我如果用for循环产生一个线程后,然后睡1毫秒再产生下一个线程的话,又不会产生这样的错误,其实那些缓存着的数据本身格式是没有问题的,因为我打印出来过,而且从我第二种产生for循环的方式也可以看出是没有问题的。不知道是怎么回事public class MultiThreadCalendarTest {static ICalendarService cal = ReferenceDataServiceFactory.getCalendarService();public static void main(String[] args) throws Exception {/** * Here is used to put the data into the cache. */cal.getNonBusinessDates("DW02", "2011");/** * MultiThreads get the data from the cache. */for (int i = 0; i < 2; i++) {new Thread() {public void run() {try {List<CountryDate> list2 = cal.getNonBusinessDates("DW02", "2011");for (CountryDate date : list2) {System.out.println(Thread.currentThread().getName()+ " " + date);}} catch (Exception e) {e.printStackTrace();}};}.start();// Thread.sleep(1);}}}

解决方案

注意其中的这段: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
解决方案二:
在你的getNonBusinessDates方法上加上synchronized关键字 用来同步
解决方案三:
你好,出现这样的原因是因为: SimpleDateFormat 这个类不是线程安全的请参见:http://rainbow702.iteye.com/admin/blogs/1155362希望你能够采纳,谢谢。

时间: 2024-09-23 19:20:13

用SimpleDateFormat把字符串转换成Date的时候报NumberFormatException的相关文章

java-从 SQlite 检索字符串转换成 sql date 类型

问题描述 从 SQlite 检索字符串转换成 sql date 类型 我使用下面的代码把数据保存到 SQlite 数据库中( java.sql.Date) public String dateToDB ( Date date) { String convertedDate = date.toString(); // yyyy-mm-dd return convertedDate; } 如何从SQlite中检索字符串,把已复原的字符串转换成sql date 类型? private Date dat

java怎么把转换成字符串转换成中国人习惯看的时间。

问题描述 java怎么把转换成字符串转换成中国人习惯看的时间. 如下代码 public class Test{ public static void main(String[] args) throws Exception { String str="2015/4/13"; Date d=new SimpleDateFormat("yyyy/MM/dd").parse(str); System.out.println(d);} } 打印出来的结果是 Mon Apr

date-小白求助 如何把字符串转换成日期格式的字符串

问题描述 小白求助 如何把字符串转换成日期格式的字符串 比如我要把"2016-01-13 10:09:24"转换成"2016/01/13"的字符串 解决方案 public static void main(String[] args) { DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String date1 = "2016-01-13 10:09:24&quo

javascript 中如何将gmt时间字符串转换成日期

问题描述 从struts2中取到的json数据为"Tue Dec 15 00:00:00 GMT+08:00 2009"是一个格林威治时间字符串怎样将它转换成date谢谢! 问题补充:redstarofsleep 写道 解决方案 我也跑了下 firefox,chrome,opera 正常safari和ie6 有问题ie7 以上没有测试解决方案二:测试过的 ie火狐 opera 都正常解决方案三:java中不想改,可以把这个字符串的倒数第一个冒号replace掉解决方案四:var str

javascript-JS 如何将 yyyy-MM-dd HH:mm:ss字符串 转换成yyyy-MM-dd字符串??

问题描述 JS 如何将 yyyy-MM-dd HH:mm:ss字符串 转换成yyyy-MM-dd字符串?? 如何将 yyyy-MM-dd HH:mm:ss字符串 转换成yyyy-MM-dd字符串? 解决方案 直接替换掉时间不分就行了 var s='2015-04-27 12:33:22';s=s.replace(/ d+(:d+){2}/'')alert(s) 解决方案二: <script>var a='2012-02-02 11:22:33';alert(a.split("&quo

新手求教,字符串转换成JSON

问题描述 新手求教,字符串转换成JSON ActiveMQ消息队列:发布者代码:messagePublisher = (SimulatedMarketMessagePublisher)applicationContext.getBean(""messagePublisher""); Message message = new Message(); Head head = new Head(); SimTradeRecord str = new SimTradeRec

javascript-js 将CST的时间字符串转换成需要的日期格式字符串

问题描述 js 将CST的时间字符串转换成需要的日期格式字符串 例如,将Mon Apr 27 09:08:20 CST 2015转化为2015-4-27 09:08:20 请问实现这个功能的JS代码应该怎么写呢? 解决方案 使用toLocaleString()方法试下: /** * @return a string representation of this date, using the locale * conventions. */ public String toLocaleStrin

string-java前台向后台传入String怎么转换成Date存入数据库中?

问题描述 java前台向后台传入String怎么转换成Date存入数据库中? 如题: 我问的是双向的,数据库中的Date也能转换成String显示在前台页面. 我用的框架是springmvc+mybatis 我知道两种实现方式: A:自定义类型转换器(实现Converter) 这样的缺点是只能单向转换.如果我要双向转换,就需要写两个转换器(麻烦) B:继承StrutsTypeConverter,这个是struts中的一个类,我现在没有用struts2. 我想问一下,写一个类型转换器,是不是不需要

javascript在将字符串转换成日期类型的时候8月份解析出现问题

问题描述 javascript在将字符串转换成日期类型的时候8月份解析出现问题 javascript在将字符串转换成日期类型的时候8月份解析出现问题,解析日期年份减一月份加一,怎么回事? 如题目所说的: 第一种方式: var date2=new Date(parseInt(toDate1.substr(0,4)),(parseInt(toDate1.substr(4,2))-0-1),parseInt(toDate1.substr(6,2))).getTime(); var date1=new