我做过很多阅读,但只发现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);
}
}
当然,这种方法需要的处理能力远远超过这个简单的例子。
现在,我目前的理解是,当 n 用户同时调用 MyServlet 时,Tomcat会在 doGet n 个线程>方法。因此,当同步调用方法 newID 时,Tomcat会对线程进行排队,并允许它们一个接一个地执行。这是对的吗?
当我有大量用户时会出现问题,因为 n 用户必须等待 newID 方法完成 n-1 次,可能需要一段时间。因此,我想异步调用 newID 方法,以便并行运行 n 线程,从而提高吞吐量。
我怎样才能做到这一点?
您是否建议使用反射,或将 newID 方法包装在 Runnable 中?
Tomcat是否负责 ExecutorService ,还是需要实现它?
任何帮助将不胜感激。示例代码也很有用!
答案 0 :(得分:1)