zoukankan      html  css  js  c++  java
  • FindBug:Call to static DateFormat

    今天在重构代码的过程中碰到了一个问题。使用SimpleDateFormat的问题。
    本人今天写了一个类,主要是提供很多静态的方法由其他接口调用,过程中多个方法使用到了日期的格式化,所以我讲SimpleDateFormat声明为了static 变量,结果在使用findBug插件对文件进行检索的时候,碰到了问题。

    STCAL: Call to static DateFormat (STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE)

    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.

    For more information on this see Sun Bug #6231579 and Sun Bug #6178997.

    Sun早已发布了这个bug,是由于使用的SimpleDateFormat非线程安全造成的。

    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
    
    public String someMethod() {
        return DATE_FORMAT.format(new Date());
    }   

    原来因为采用上面的写法,有的时候可能会造成Bug。 Sun公司的bug记录中也有提到,当服务超载的情况下,就会出现bug。
    现在将其改为下面的写法

    private static final String DATE_FORMAT = "yyyy-MM-dd";
    
    public String someMethod() {
        return new SimpleDateFormat(DATE_FORMAT).format(new Date());
    }

    现在采用这种写法,每次都会生成新的SimpleDateFormat对象,就不会出现错了。使用FindBug检查一遍,发现问题解决。

  • 相关阅读:
    洛谷P2216 理想的正方形
    洛谷P2698 花盆Flowerpot【单调队列】
    洛谷P2178 品酒大会【后缀数组】【单调栈】
    洛谷P2463 Sandy的卡片【后缀数组】【二分】
    PAT甲1038 Recover the smallest number
    PAT甲1101 Quick Sort
    PAT甲1031 Hello World for U【字符串】
    PAT甲1005 Spell it right【字符串】
    django_logging
    django_session
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461606.html
Copyright © 2011-2022 走看看