0

を私は複数のスレッド上で、次の方法を実行しています:同時HTTPリクエスト

private JSONObject jsonFromUrl(String requestUrl) { 
    try { 
     URLConnection connection = new URL(requestUrl).openConnection(); 
     connection.setRequestProperty("Accept-Charset", charset); 
     InputStream response = connection.getInputStream(); 
     JSONParser jsonParser = new JSONParser(); 
     return (JSONObject)jsonParser.parse(
       new InputStreamReader(response,charset)); 
    } catch (Exception e) { 
     Logger.error("Exception while sending request: " + requestUrl + " error: " + e); 
     e.printStackTrace(); 
     return new JSONObject(); 
    } 
} 

は、HTTPリクエストを並列に処理されていますか?この方法でリクエストを作成すると、最初のレスポンスが到着するまで他のスレッドからリクエストが送信されなくなりますか?

+2

回答:並列、はい。他のインスタンスをブロックする、いいえ。異なるスレッド間でURLダウンロードの複数のインスタンスを実行できないと思われる理由はありますか? – selbie

+0

遅延が予想よりも長く、これが接続の結果であるか、または並列性の欠如であるかを判別することはできません – Yigal

+0

InputStreamをどこで終了しますか? –

答えて

1

このメソッドは、異なるスレッドから呼び出すことができます。共用変数は存在しないため、並行性の問題はありません。ただし、接続プール(ソケット接続)を使用して接続を再利用し、応答を高速化することで、プロセスを最適化できます。 ソケットを制御する方法がないと、時間の応答が遅くなる可能性があります。もちろん、オープンソケット接続と、ソケットを開いたままにするサーバーの可能性について説明しています(キープアライブヘッダー)