gpt4 book ai didi

java - 为什么 Java 的 SimpleDateFormat 不是线程安全的?

转载 作者:IT老高 更新时间:2023-10-28 12:14:59 26 4
gpt4 key购买 nike

请用代码示例说明为什么 SimpleDateFormat 不是线程安全的。这个类有什么问题?SimpleDateFormat的格式化功能有问题?请给出在类里面演示此故障的代码。

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

请用演示此问题的代码解释一下?

最佳答案

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

source code显示有一个 Calendar 实例字段,用于 DateFormat/SimpleDateFormat 上的操作。

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

在不交易线程安全的情况下重用日期格式的一种方法是将它们放在 ThreadLocal 中 - 一些库会这样做。那就是如果您需要在一个线程中多次使用相同的格式。但如果您使用的是 servlet 容器(具有线程池),请记住在完成后清理线程本地。

说实话,我不明白他们为什么需要实例字段,但事实就是如此。您也可以使用joda-time DateTimeFormat 是线程安全的。

关于java - 为什么 Java 的 SimpleDateFormat 不是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6840803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com