我想在java中调用一个由于某种原因阻塞的方法。我想等待X分钟的方法,然后我想停止那个方法。
我在StackOverflow上阅读了一个解决方案,这让我第一次快速入门。我在这里写的是: -
ExecutorService executor = Executors.newCachedThreadPool();
Callable<Object> task = new Callable<Object>() {
public Object call() {
return something.blockingMethod();
}
};
Future<Object> future = executor.submit(task);
try {
Object result = future.get(5, TimeUnit.SECONDS);
} catch (TimeoutException ex) {
// handle the timeout
} catch (InterruptedException e) {
// handle the interrupts
} catch (ExecutionException e) {
// handle other exceptions
} finally {
future.cancel(); // may or may not desire this
}
但是现在我的问题是,我的函数可以抛出一些我必须捕获的异常并相应地执行一些任务。所以如果在代码中函数blockingMethod()有一些异常,我如何在Outer类中捕获它们?
答案 0 :(得分:4)
您可以在所提供的代码中设置所有内容。只需替换
// handle other exceptions
进行异常处理。
如果您需要获取具体的Exception
,请通过以下方式获取:
Throwable t = e.getCause();
要区分您的例外,您可以这样做:
if (t instanceof MyException1) {
...
} else if (t instanceof MyException2) {
...
...
答案 1 :(得分:1)
我想cause
ExecutionException个实例中的{{1}}。
答案 2 :(得分:1)
:e.getCause() http://docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html#getCause()
答案 3 :(得分:-1)
thread.sleep(x millisecods)将使线程停止x毫秒,然后它将恢复。另一种方法是调用thread.wait(x)(带有x的超时值),然后调用thread.notify()来“唤醒”睡眠线程。