【发布时间】:2016-09-27 16:46:24
【问题描述】:
我知道一个 Servlets 实例由多个线程共享以处理并发请求。在 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 ExternalClassOne(),都会创建一个新实例。这就是new的目的。 Tomcat 与此无关,也无法控制任何事情:new 创建一个实例,无论您的环境是什么。
标签: java multithreading tomcat servlets