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

大家都警告Java DateFormat不能保证线程安全,我从理论上理解这个概念。


但是我无法想象由此导致的实际问题。说,我在一个类中有一个DateFormat字段,并且在多线程环境中该类的不同方法(格式化日期)中使用了相同的字段。


这会导致:


任何异常,例如格式异常

数据差异

还有其他问题吗?

另外,请解释原因。


饮歌长啸
浏览 554回答 3
3回答

SMILET

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

相关分类

Java