为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Java的SimpleDateFormat不安全?

为什么Java的SimpleDateFormat不安全?

慕斯王 2019-07-03 14:25:00
为什么Java的SimpleDateFormat不安全?请用代码示例说明SimpleDateFormat为什么不是ThreadSafe。这门课有什么问题?是SimpleDateFormat格式函数的问题吗??请给出一个代码,说明这个错误在课堂上。FastDateFormat是线程安全。为什么?SimpleDateFormat和FastDateFormat的b/w有什么区别?请用代码说明这个问题?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

SimpleDateFormat在实例字段中存储中间结果。因此,如果一个实例被两个线程使用,它们可能会导致彼此的结果混乱。

看着源代码揭示出Calendar实例字段,该字段由DateFormat / SimpleDateFormat.

例如parse(..)打电话calendar.clear()一开始,然后calendar.add(..)..如果另一个线程调用parse(..)在第一次调用完成之前,它将清除日历,但另一次调用将期望它填充计算的中间结果。

重用数据格式而不进行线程安全的一种方法是将它们放在ThreadLocal-有些图书馆这样做。这是如果您需要在一个线程中多次使用相同的格式。但是,如果您使用的是servlet容器(其中有一个线程池),请记住在完成之后清除线程本地。

老实说,我不明白他们为什么需要实例字段,但情况就是这样。您也可以使用尤达-时间 DateTimeFormat那就是线安全。


查看完整回答
反对 回复 2019-07-03
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

DateTimeFormatter在Java 8中,它是不可变的和线程安全的替代方案。SimpleDateFormat.


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 694 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信