2011-09-01 8 views
1

Javaサーブレットが非同期で実行される可能性があると聞きました。しかし、これは、単一のサーブレットへのリクエストが非同期的に処理されること、または異なるサーブレットへのリクエストだけが非同期であることを意味します。私は2つの同時要求、終了する最初のための第二待ちをする際に、今HttpServletへのHTTPリクエストは非同期で処理されますか

public class DummyServlet extends HttpServlet 
{ 
... 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
{ 
    response.setContentType("text/plain; charset=utf-8"); 

    PrintWriter writer = new PrintWriter(response.getOutputStream()); 

    writer.write("DummyServlet invocation"); 

    System.out.print("Invocation: " + counter); 

     Thread.sleep(5000); 

    System.out.println(" ... done."); 
    counter++; 

    writer.flush(); 
    writer.close(); 
} 

基本的に、私は私のプロジェクトでは、この1つのサーブレットを持っています。 このシナリオでは、どのように非同期動作を実現できますか?

更新:リクエストは非同期で処理されます。リクエストは非同期では生成されませんでした。

+3

サーブレットのメソッドは同期型で、個々の要求は同期して処理されます。ただし、コンテナは個々の要求に個別のスレッドを使用するため、異なるスレッドで同時に実行する必要があります。なぜ2つの呼び出しが連続して実行されると思いますか? – fvu

+0

'2つの同時リクエストを行うと、2番目のリクエストは最初から最後まで待機します。 '与えられたコードが真でない場合、どちらも別のスレッドで提供されます –

+0

出力には正確に何が表示されていますか? – hvgotcodes

答えて

3

実装によって、すべてのサーブレット要求は別のスレッドで実行されます。だから、それは非同期の犠牲です。

+0

彼は経験している動作を説明しません。 – aioobe

+0

@aioobe - はい、多分彼は混乱していて、実際には別々に走っています。何らかの理由で考えることができません。 –

+0

これを読んだ後、私はブラウザが非同期の方法でリクエストを生成していないことに気付きました。 – comco

関連する問題