【发布时间】:2012-01-15 14:49:16
【问题描述】:
我在课堂上以下列方式在我的应用程序中使用简单的日期格式:
static SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
public static myFunction(final String strDate)
{
Date endDate = null;
endDate = MyClass.sdf.parse(strDate);
}
我正在使用 FindBugs,它在上面的代码中给出了以下错误:
“正如 JavaDoc 所述,对于多线程使用,DateFormat 本质上是不安全的。检测器发现了对通过静态字段获得的 DateFormat 实例的调用。这看起来很可疑。”
谁能解释一下这个错误。我无法理解上述消息试图说明的内容。
感谢阅读!!
【问题讨论】:
-
可能duplicate?
-
@Dallas 指出的问题措辞不同,但接受的答案很有用且相当完整。
-
大多数开发人员都明白,对于大多数非线程安全的类,这是由于同时更改状态所致。建立格式后,格式化日期不应更改状态。仅在官方文档中将其记录为不是线程安全的是不够的。应该明确记录,如果格式方法在实例变量中保持临时状态,则它也不是线程安全的。将其声明为静态不仅仅是一个新手错误。可以在修改集合 (put) 与访问集合 (get) 之间进行类比。
标签: java findbugs simpledateformat