2017-07-05 10 views
-3

この関数はマルチスレッド状態でデッドロックを引き起こしますか?このコードの問題は何ですか?この関数はマルチスレッド状態でデッドロックを引き起こしますか?

このコードは、このプロキシは、(使用可能な場合は応答コードが200であるべきである)使用可能であるかどうかを判断するために、指定されたプロキシを介してウェブサイトに接続しよう。

しかし、この機能は、いくつかの時間では決してリターンをます。複数のスレッドがmutexを入力しようとすると

public static boolean verifyProxy(String ip, int port){ 
    boolean useful; 
    try { 
    URL url = new URL(VERIFY_URL); 
    InetSocketAddress addr = new InetSocketAddress(ip, port); 
    Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); 
    HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy); 
    connection.setConnectTimeout(4 * 1000); 
    int rCode = connection.getResponseCode(); 
    connection.disconnect(); 
    useful = rCode == 200; 
    } catch (IOException e1){ 
    logger.warn(String.format("verify proxy %s:%d exception: "+e1.getMessage(),ip, port)); 
      useful = false; 
    } 
    logger.info(String.format("verify proxy %s:%d useful: "+useful, ip, port)); 
    return useful; 
} 
+2

私はそうは思わない...まだこの質問をhttps://codereview.stackexchange.com/ – Akshay

+1

で聞くことができます。このコードの問題は何もわかりません。それ。 –

+1

@JoeC正確に... @邓辉超あなたはコードやエラー(もしあれば)の詳細を提供する必要があります – Akshay

答えて

1

デッドロックが発生します。

意味:何とか守られているコードのセクション。暗黙のうちに、​​が使用されているため、またはいくつかのロックオブジェクトからロックを明示的に取得することによって実行されます。

あなたがここに表示されているコードは、そのような何もしません。

ロックがない場合は、デッドロックもありません。

OPの最新のコメントを考える:言ったように、デッドロックはできません。したがって、このコードがハングアップすると、明白な理由は:ネットワークの問題です。ネットワーキングはあらゆる種類の奇妙な問題を引き起こす可能性があります。

javadocを読んで、そのタイムアウトを設定した後にconnect()に電話する方法があるのだろうかと思います。

関連する問題