我正在使用一个callable来打开finally块中包含的一些输入流,由于一些令人烦恼的原因,由于我不关心的原因而抛出过早的eof异常。我想给可调用者一定的时间,然后如果它没有完成则关闭它。但是我如何关闭可调用内部finally块内的东西呢? 例如,在以下代码中,finally块打印“e”永远不会被执行。
ExecutorService e = Executors.newSingleThreadExecutor();
Future<Integer> f = e.submit(new Callable<Integer>() {
public Integer call() {
try {
int i = 0;
while(i<1) {
}
} finally {
System.out.println("e");
}
return 4;
}
});
try {
Integer i = f.get(2, TimeUnit.SECONDS);
} catch(Exception ef) {
System.out.println("l");
}
答案 0 :(得分:1)
您提供的代码示例中的finally
块永远不会执行,因为没有任何执行路径可以转义while
循环。如果满足while
循环终止条件或者某些代码可能throw
RuntimeException
,那么您将看到sysout。
答案 1 :(得分:1)
我认为你正在咆哮错误的树。如果流是套接字输入流,则应使用Socket.setSoTimeout()强制执行读取超时,如果是HTTP流,则应使用HttpURLConnection.setReadimeout()。数据库有超时。在我能想到的读取中阻止的所有内容都会超时。