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

“ Java DateFormat不是线程安全的”这会导致什么?

“ Java DateFormat不是线程安全的”这会导致什么?

饮歌长啸 2019-11-05 15:17:24
大家都警告Java DateFormat不能保证线程安全,我从理论上理解这个概念。但是我无法想象由此导致的实际问题。说,我在一个类中有一个DateFormat字段,并且在多线程环境中该类的不同方法(格式化日期)中使用了相同的字段。这会导致:任何异常,例如格式异常数据差异还有其他问题吗?另外,请解释原因。
查看完整描述

3 回答

?
SMILET

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

我希望数据损坏-例如,如果您同时解析两个日期,则一个呼叫可能被另一个数据污染。


很难想象这是怎么发生的:解析通常涉及维护到目前为止您所读内容的一定数量的状态。如果两个线程都在同一状态下践踏,则会遇到问题。例如,DateFormat公开一个calendartype 的字段Calendar,并查看的代码SimpleDateFormat,其中一些方法调用,calendar.set(...)而另一些方法调用calendar.get(...)。这显然不是线程安全的。


我还没有研究过为什么不是线程安全的确切细节DateFormat,但是对我而言,足以知道如果没有同步它是不安全的-不安全的确切方式甚至可能在版本之间发生变化。


就我个人而言,我将使用来自Joda Time的解析器,因为它们是线程安全的-并且Joda Time是一个更好的日期和时间API:


查看完整回答
反对 回复 2019-11-05
  • 3 回答
  • 0 关注
  • 553 浏览

添加回答

举报

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