【发布时间】:2013-08-28 13:43:47
【问题描述】:
上下文:
我做了很多阅读,但只发现this半相关。
我有一个 servlet,它调用另一个 Java 类的方法,同时传递会话敏感数据。它在 Tomcat 服务器上运行。
看起来像这样:
@WebServlet(urlPatterns = {"/MyServlet", "/"})
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException{
HttpSession session = request.getSession(true); //Start a session
String UserID = session.getId(); //Get a unique user ID
MyClass cls = new MyClass(); //Initialize my class
String shortID = cls.newID(UserID); //Call a method from class
System.out.println("Your short ID is: " + shortID); //Print the result
}
}
然后说我正在调用的类看起来像这样:
public class MyClass {
public String newID(String UserID){
String shortID;
... //Method for shortening the UserID
return(shortID);
}
}
该方法当然需要比这个简单示例中显示的更多的处理。
问题 1:
现在,我目前的理解是,当 n 个用户同时调用 MyServlet 时,Tomcat 在 doGet 中创建 n 个线程> 方法。所以当方法 newID 被同步调用时,Tomcat 会将线程排入队列并允许它们一个接一个地执行。这是正确的吗?
问题2:
当我有大量用户时会出现问题,因为第 n 个用户必须等待 newID 方法完成 n-1 次,这可能需要一段时间。因此,我想异步调用 newID 方法,以便并行运行 n 个线程,从而提高吞吐量。
我怎样才能做到这一点?
您会建议使用反射,还是将 newID 方法包装在 Runnable 中?
Tomcat 是否负责ExecutorService,还是我也需要实现它?
任何帮助将不胜感激。示例代码也会很有用!
【问题讨论】:
-
所以你的问题是你的tomcat在给定时间处理的最大请求是多少,以及如何调整这个数字?
-
@rocketboy 更像是“如何加快处理大量请求的速度?” SotiriosDelimanolis,我改了,谢谢。
标签: java multithreading tomcat servlets asynchronous