Java 静态方法,静态变量可以在web app-jsp中被多个线程变异吗
我正在做这个项目。有一个类DefaultsHelper,它具有: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() ;
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());}