サーブレットを定義 (/index にマップ) し、doPost メソッドを次のように書き直しました。
private Object lock = new Object();
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("start");
synchronized(lock) {
try {
lock.wait(15000);
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.notifyAll();
}
}
最初のリクエストが来ると、「開始」を出力してから待機し、2番目のリクエストが来ると、思ったlock.wait(15000);
ようにブロックされるはずです。synchronized(lock);
しかし、実際には、2 番目の要求はdoPost
メソッドからブロックされています。最初のリクエストがlock.notifyAll();
送信された後、2 番目のリクエストがdoPost
メソッドに入り、'start' を出力します。
これは、2 つのリクエストがまったく同じ URL をクエリした場合にのみ発生することがわかりました。これは、Tomcat がマルチスレッドを処理する方法ですか?? 私はとても混乱しています..