语境:
我做了很多阅读,但只发现这是半相关的。
我有一个 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 会将线程排队并允许它们一个接一个地执行。它是否正确?
问题2:
当我有大量用户时会出现问题,因为第n个用户将不得不等待newID方法完成n-1次,这可能需要一段时间。因此,我将要异步调用newID方法,以便并行运行n 个线程,从而提高吞吐量。
我怎样才能做到这一点?
您会建议使用反射,还是将newID方法包装在Runnable中?
Tomcat 是否负责ExecutorService,还是我也需要实现它?
任何帮助都感激不尽。示例代码也会很有用!