为什么Java的SimpleDateFormat不安全?

为什么Java的SimpleDateFormat不安全?

请用代码示例说明SimpleDateFormat为什么不是ThreadSafe。这门课有什么问题?是SimpleDateFormat格式函数的问题吗??请给出一个代码,说明这个错误在课堂上。

FastDateFormat是线程安全。为什么?SimpleDateFormat和FastDateFormat的b/w有什么区别?

请用代码说明这个问题?


慕斯王
浏览 695回答 3
3回答

MMTTMM

SimpleDateFormat在实例字段中存储中间结果。因此,如果一个实例被两个线程使用,它们可能会导致彼此的结果混乱。看着源代码揭示出Calendar实例字段,该字段由DateFormat / SimpleDateFormat.例如parse(..)打电话calendar.clear()一开始,然后calendar.add(..)..如果另一个线程调用parse(..)在第一次调用完成之前,它将清除日历,但另一次调用将期望它填充计算的中间结果。重用数据格式而不进行线程安全的一种方法是将它们放在ThreadLocal-有些图书馆这样做。这是如果您需要在一个线程中多次使用相同的格式。但是,如果您使用的是servlet容器(其中有一个线程池),请记住在完成之后清除线程本地。老实说,我不明白他们为什么需要实例字段,但情况就是这样。您也可以使用尤达-时间 DateTimeFormat那就是线安全。

慕盖茨4494581

DateTimeFormatter在Java 8中,它是不可变的和线程安全的替代方案。SimpleDateFormat.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java