環境:
私はたくさんの読書をしましたが、これは半関連性しかありませんでした.
セッション依存のデータを渡しながら、別の 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回完了するのを待つ必要があるため、多数のユーザーがいる場合に問題が発生します。これには時間がかかる場合があります。したがって、スループットを向上させるために、 n 個のスレッドを並行して実行するためにnewIDメソッドを非同期で呼び出す必要があります。
どうすればこれを達成できますか?
リフレクションを使用すること、またはnewIDメソッドをRunnable内にラップすることをお勧めしますか?
Tomcat はExecutorServiceを処理しますか、それとも実装する必要がありますか?
どんな助けでも大歓迎です。サンプルコードも役に立ちます!