0

テキスト ファイルから大量の URL を読み取り、HttpURLConnectionそれぞれで を開き、HTTP コードをチェックして、サイトが正しく接続されているかどうかを確認する Java クラスに取り組んできました。この機能は正常に動作します。問題は、ここで何十万ものリンクを扱っていることです。この方法ではこれらすべてを処理するには遅すぎます。プロセスをより効率的にするためにスレッドを使用しようとしましたが、何らかの理由でさらに遅くなるように見えました. 潜在的な解決策について何か提案はありますか? ありがとう!

    public static boolean validate(String urlStr, Proxy proxy) 
{   
    boolean valid = false;  
    HttpURLConnection conn = null;
    try
    {
        if(proxy==null)         
            conn = (HttpURLConnection)new URL(urlStr).openConnection();
        else
            conn = (HttpURLConnection)new URL(urlStr).openConnection(proxy);
        conn.setFollowRedirects(false);
        conn.setConnectTimeout(7 * 1000);
        conn.setRequestMethod("GET");
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)");
        conn.connect();
        final int code = conn.getResponseCode();
        valid = (Arrays.binarySearch(errorCodes, code) == -1);
    }
    catch(IOException e)
    {
        // Ignore this for now. Eventually we should add a logger
    } finally {
        if (conn != null)
        {
            conn.disconnect();
        }
    }
    return valid;
}
4

2 に答える 2

0

接続管理を自分で行うより、Apache http クライアント API を使用した方がよいでしょう。

クライアント API チュートリアル

マルチスレッドのユースケースの例。

サンプルコード

このコードは参考用であることに注意してください。実際の製品コードでは、スレッド管理に Pooled Executors を使用する必要があります。Validate メソッドは、ユースケースに応じて Runnable または Callable インターフェースを実装するクラスの一部である必要があります。

于 2013-07-08T06:28:58.083 に答える