1

我想在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 类中捕获它们?

4

4 回答 4

4

在您提供的代码中,您已经完成了所有设置。只需更换

// handle other exceptions

与您的异常处理。
如果您需要获取您的具体信息Exception,您可以通过以下方式获得它:

Throwable t = e.getCause();

为了区分您的异常,您可以这样做:

if (t instanceof MyException1) {
  ...
} else if (t instanceof MyException2) {
  ...
...
于 2012-07-06T13:14:20.027 回答
1

我想在ExecutionException实例中cause

于 2012-07-06T13:11:57.650 回答
1

ExecutionExceptioncatch 块中:e.getCause()

https://docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html#getCause

于 2012-07-06T13:14:27.493 回答
-1

thread.sleep(x millisecods) 将停止线程 x 毫秒,然后它将恢复。另一种方法是调用 thread.wait(x)(x 具有超时值),然后调用 thread.notify() 以“唤醒”睡眠线程。

于 2012-07-06T13:14:59.660 回答