【发布时间】:2014-06-04 00:53:05
【问题描述】:
我有一些 Task 执行了一个可能挂起的 I/O 阻塞操作(从 URL 获取文件)
task = new Task<List<WSDLOperation>>() {
@Override
protected List<WSDLOperation> call() {
List<WSDLOperation> services = new ArrayList<>();
try {
services = WSDLService.createService(wsdlURL).getOperations();
} catch (Exception ex) {
LOG.log(Level.WARNING, "Can't reach {0}", wsdlURL);
}
return services;
}
};
}
方法createService 可以永远等待而不会抛出任何Exception。
(我使用 Main 类中定义的全局 (static public)ExecutorService 执行任务。
【问题讨论】:
-
看起来问题出在 createService 方法中。可以永远挂起的方法应该抛出中断的异常,否则很难杀死它(你总是可以调用 System.exit 这是一个不好的做法 - 它会杀死整个 jvm )。如果您还没有,请参阅stackoverflow.com/questions/671049/…。
-
createService是第三方方法,我无法控制它,有什么方法可以将Task与一些超时相关联吗? -
你有api文档的链接吗?
-
Future可能会对您有所帮助。见stackoverflow.com/questions/2275443/how-to-timeout-a-thread -
该操作似乎在长时间超时后触发了
Exception。
标签: java concurrency javafx javafx-8