Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlet容器如何实例化servlet使用的外部类?_Java_Multithreading_Tomcat_Servlets - Fatal编程技术网

Java 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

我知道多个线程共享一个servlet实例来处理并发请求。在servlet内部,我将调用其他线程安全类
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
  • 如果它们是为每个请求的每个线程创建的(例如,100个并发请求=100个
    ExternalClassOne
    实例),使它们成为单实例是否会提高性能?Tomcat是否有任何“魔力”可以在可能的情况下重用线程安全实例

  • 在每次执行
    new
    时都会创建实例,如上所述。 注意单例:获取实例需要同步方法调用,这会破坏应用程序的响应能力。 Tomcat不提供任何这样的afaik方法,而是提供Java库。您可以使用本地线程。
    否则,在应用程序启动时在
    ContextListener
    中创建(线程安全)类,并将它们放在应用程序上下文中,这样每个servlet都可以从那里获取它们。

    每次执行
    new ExternalClassOne()
    时,都会创建一个新实例。这就是
    new
    的目的。Tomcat与此无关,也无法控制任何事情:无论您的环境如何,new都会创建一个实例。