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

SMILET
TA贡献1796条经验 获得超4个赞
我希望数据损坏-例如,如果您同时解析两个日期,则一个呼叫可能被另一个数据污染。
很难想象这是怎么发生的:解析通常涉及维护到目前为止您所读内容的一定数量的状态。如果两个线程都在同一状态下践踏,则会遇到问题。例如,DateFormat公开一个calendartype 的字段Calendar,并查看的代码SimpleDateFormat,其中一些方法调用,calendar.set(...)而另一些方法调用calendar.get(...)。这显然不是线程安全的。
我还没有研究过为什么不是线程安全的确切细节DateFormat,但是对我而言,足以知道如果没有同步它是不安全的-不安全的确切方式甚至可能在版本之间发生变化。
就我个人而言,我将使用来自Joda Time的解析器,因为它们是线程安全的-并且Joda Time是一个更好的日期和时间API:
添加回答
举报
0/150
提交
取消