3

我正在做这个项目。有一个类 DefaultsHelper 具有:

    public  class DefaultsHelper {

    static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd") ;

    public static String getDate(int days)
    {
        GregorianCalendar c = new GregorianCalendar() ;
        c.setTime(new Date()) ;
        c.add(Calendar.DAY_OF_MONTH, days);
        return df.format(c.getTime()) ;

    }
}

在 Web 应用程序中 - 如果两个用户同时查看一个 jsp 并调用 getDate 函数 - df 对象是否可能会变得不一致,从而不返回预期值?

我认为 DefaultsHelper 旨在成为一个实用程序类,无需实例化新的 df 对象

4

1 回答 1

5

您为每个线程创建一个新Calendar的,这很好,但是您正在使用SimpleDateFormat跨多个线程。如果该类是线程安全的,那就没问题了,但它不是.

SimpleDateFormat因线程不安全而臭名昭著。只需为每个调用(即在方法中)创建一个新的,或者更好的是,使用Joda-Time来完全避免线程问题。

关于创建一个格式化程序类作为优化的主题,这是过早优化和无意结果的经典示例。鉴于这是在 JSP 中,HTTP 请求/响应时间将使新格式化程序的实例化时间(和资源要求)相形见绌。使您的类线程安全且不可变,并在出现问题时担心优化。

于 2012-12-06T14:29:59.027 回答