Java 静态方法,静态变量可以在web app-jsp中被多个线程变异吗

Java 静态方法,静态变量可以在web app-jsp中被多个线程变异吗,java,multithreading,jsp,methods,static,Java,Multithreading,Jsp,Methods,Static,我正在做这个项目。有一个类DefaultsHelper,它具有: public class DefaultsHelper { static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd") ; public static String getDate(int days) { GregorianCalendar c = new GregorianCalendar() ;

我正在做这个项目。有一个类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对象。你可以为每个线程创建一个新的日历,这很好,但是你可以跨多个线程使用SimpleDataFormat。如果该类是线程安全的,这就可以了,但事实并非如此

SimpleDateFormat
。只需为每次调用(即在方法中)创建一个新的调用,或者更好的是,使用它来完全避免线程问题


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

谢谢,我想可能是这样的-我最好在这个方法中实例化一个新的SimpleDataFormat,或者改变整个过程的工作方式!这帮我省了一个大麻烦,因为dbase中有很多次是用这种方式编写的。通过在应用程序中搜索SimpleDataFormat的静态实例,您将极大地提高线程安全性!谢谢,太好了,我改变了静态,看起来怎么样?公共静态字符串getDate(int days){GregorianCalendar c=new GregorianCalendar();c.setTime(new Date());SimpleDateFormat dft=new SimpleDateFormat(“yyyy-MM-dd”);c.add(Calendar.DAY/u/u/u月,天);返回dft.format(c.getTime());}