这个函数会在多线程条件下导致死锁吗?

时间:2017-07-05 06:59:57

标签: java multithreading

此函数是否会在多线程条件下导致死锁?这段代码的问题是什么?

此代码尝试通过给定代理连接网站,以确定此代理是否可用(如果可用,响应代码应为200)。

但是这个功能会在一段时间内从不返回。

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;
}

1 个答案:

答案 0 :(得分:1)

当多个线程尝试输入 mutex 时,会发生死锁。

含义:以某种方式保护的一段代码。隐式地,因为使用了synchronized;或者通过从某个锁定对象中明确获取锁定。

您在此处显示的代码确实没有

没有锁定转换为:也没有死锁。

鉴于OP的最新评论:如上所述;你不能有死锁。因此,当此代码挂起时,显而易见的原因是:网络问题。是的,网络可能会导致各种奇怪的问题。

在阅读javadoc时,我想知道在设置超时后是否有办法调用connect()