我们产品在客户体验时,为了提高产品质量,我们技术人员使用FindBug来排查系统中可能存在的潜在BUG。
其中有部分FindBug警告提示,代码存在非线程安全隐患,如以下的就是一处:
Bug: Call to method of static java.text.DateFormat
Pattern id: STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE, type: STCAL, category: MT_CORRECTNESS
As the JavaDoc states, DateFormats are inherently unsafe for multithreaded use. The detector has found a call to an instance of DateFormat that has been obtained via a static field. This looks suspicous.
这个Bug提示说的很明白,
导致SimpleDateFormat出现多线程安全问题的原因,是因为:SimpleDateFormat处理复杂,Jdk的实现中使用了成员变量来传递参数,这就造成在多线程的时候会出现错误。