Java servlet容器如何实例化servlet使用的外部类?
我知道多个线程共享一个servlet实例来处理并发请求。在servlet内部,我将调用其他线程安全类:Java servlet容器如何实例化servlet使用的外部类?,java,multithreading,tomcat,servlets,Java,Multithreading,Tomcat,Servlets,我知道多个线程共享一个servlet实例来处理并发请求。在servlet内部,我将调用其他线程安全类:ExternalClassOne,它依次调用ExternalClassTwo public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
ExternalClassOne
,它依次调用ExternalClassTwo
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ExternalClassOne cOne = new ExternalClassOne();
cOne.doSomething();
//doSomething() will also use other classes like ExternalClassTwo, ExternalClassThree...
}
}
我有一些问题:
ExternalClassOne
,ExternalClassTwo
ExternalClassOne
实例),使它们成为单实例是否会提高性能?Tomcat是否有任何“魔力”可以在可能的情况下重用线程安全实例在每次执行
new
时都会创建实例,如上所述。
注意单例:获取实例需要同步方法调用,这会破坏应用程序的响应能力。
Tomcat不提供任何这样的afaik方法,而是提供Java库。您可以使用本地线程。
否则,在应用程序启动时在
ContextListener
中创建(线程安全)类,并将它们放在应用程序上下文中,这样每个servlet都可以从那里获取它们。每次执行new ExternalClassOne()
时,都会创建一个新实例。这就是new
的目的。Tomcat与此无关,也无法控制任何事情:无论您的环境如何,new都会创建一个实例。