【发布时间】:2016-04-22 13:21:47
【问题描述】:
我最近意识到/了解到SimpleDateFormat 有一些严重的问题,因为 Java 8 不应该再使用了。我的意思是……我有点知道,但从来没有太在意。到目前为止,一切都很好。
但是好吧...我有很多在过去 7 到 8 年编写的遗留代码确实使用 SimpleDateFormat,将许多 SimpleDateFormat 对象存储为静态字段,并使用它们来解析/格式化日期。实际上,这些SimpleDateFormat 实例(无论是否静态)在生产中(这些年来)从来没有遇到过任何问题。
所以...我现在想回顾和分析这段遗留代码,看看其中是否真的存在SimpleDateFormat 的任何危险用途。
所以我的问题是……
SimpleDateFormat到底在什么场景下使用有问题?
我可以获得某种清单,以便我查看我的旧代码并查看我的任何场景是否在那个“尽量避免”列表中?
【问题讨论】:
-
它不是线程安全的,所以如果两个线程同时使用同一个
SimpleDateFormat对象就会出现问题。 -
如果代码当前正在运行,则不会突然添加新的缺陷。但是,新的 Date & Time API 更更易于正确使用。
-
@jarnbjo 主要是这些描述在这里:stackoverflow.com/questions/6840803/… 嗯......所以......这真的是不必要的麻烦吗?
-
@peter.petrov 您链接的问题讨论了 SimpleDateFormat 类中缺乏线程安全性。这就是你所说的“严重问题”和避免上课的理由吗?如果是这样,那么大部分标准 Java API(集合、磁盘和网络 I/O、AWT/Swing)都存在“严重问题”,必须避免。
-
在分析遗留代码时,您至少可以在方法主体内整理出所有本地创建的
SimpleDateFormat实例(线程安全)。您只需调查共享实例以评估其使用是否安全(即,在给定上下文中是否有多个线程访问同一实例)。
标签: java multithreading date thread-safety simpledateformat