JAVA:经过这么多时间后中断线程

时间:2011-03-01 17:49:08

标签: java multithreading time wsdl

我目前正在开展一个项目,该项目要求我从互联网上下载WSDL文件。

我问题之外的一切都很有效......

我使用以下代码:

private Definition getDefinition(String url) throws WSDLException {

    // Read the url and return an instance to a WSDL Definition
    return WSDLFactory.newInstance().newWSDLReader().readWSDL(url);

}

这个WSDLFactory是一个Thread(据我所知)。我遇到的问题是,在我提供的URL列表中,其中一些指向不再存在的WSDL。这反过来导致我的程序在实现它应该抛出FileNotFoundException之前等待非常长的时间。这是因为WSDL应该永远返回HTTP_RESPONSE代码所在的位置。

有没有办法可以将这个WSDLFactory包装成试图获取WSDL但只给它5-10秒的东西?在此之后,它说“你有太多的时间来做这件事。我们正在踩过你”?

4 个答案:

答案 0 :(得分:2)

查看Executor和Futures框架。

答案 1 :(得分:2)

尽可能socket.setSoTimeout或通过库中的更高级配置选项设置基础套接字的超时。

其他(如果你在类路径上有谷歌的番石榴)试试:

http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/util/concurrent/TimeLimiter.html

答案 2 :(得分:1)

您可以尝试设置http超时sun.net.client.defaultConnectTimeout。当然这取决于WSDLReader的实现 点击这里: networking properties

答案 3 :(得分:-1)

使用辅助线程,在5秒后调用第一个线程上的interrupt()方法。在第一个线程中处理InterruptedException。