SimpleDateFormat线程安全

问题:

请告诉一个代码示例,为什么SimpleDateFormat不是线程安全的。这个课程有什么问题?
 是SimpleDateFormat格式函数的问题
请给出一个在课堂上演示这个错误的代码。
FastDateFormat是线程安全的。为什么?
有什么区别b / w的SimpleDateFormat和FastDateFormat?
请用一个代码说明这个问题?

回答:

 SimpleDateFormat将中间结果存储在实例字段中。所以如果一个实例被两个线程使用,他们可以混淆对方的结果。
查看source code表明有一个Calendar实例字段,由DateFormat / SimpleDateFormat上的操作使用
例如parse(..)首先调用calendar.clear()然后calendar.add(..)。如果另一个线程在第一次调用完成之前调用parse(..),它将清除日历,但另一个调用将期望使用中间计算结果填充日历。
在不交易线程安全性的情况下重用日期格式的一种方法是将它们放在ThreadLocal中 – 某些库会这样做。那就是如果你需要在一个线程中多次使用相同的格式。但是,如果您正在使用servlet容器(具有线程池),请记住在完成后清理线程本地。
说实话,我不明白为什么他们需要实例字段,但这是它的方式。您也可以使用线程安全的joda-time DateTimeFormat

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: SimpleDateFormat thread safety

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

6 + 2 =