我有一个预定的执行器,其函数连接到互联网,并且有可能抛出异常。该执行器是我正在开发的 SDK 的一部分,必须将异常抛出到实现应用程序。
我目前正在执行以下操作,
Runnable task = new Runnable()
{
@Override
public void run(){
WindowCallback();
}
};
_windowTimer.scheduleAtFixedRate(task,
0, this.SQSWindow, TimeUnit.MILLISECONDS);
其中 WindowCallback() 应该抛出异常,但当前正在捕获异常以使此代码正常工作。
我想做以下事情
Callable task = new Callable()
{
@Override
public Object call() throws Exception{
WindowCallback();
}
};
_windowTimer.scheduleAtFixedRate(task,
0, this.SQSWindow, TimeUnit.MILLISECONDS);
但是Callable与执行器的scheduleAtFixedRate函数不兼容。
如何在循环计时器中使用可以抛出异常的 Callable?
最佳答案
一旦任务抛出异常,它就结束了:它不会被重新安排。即使事实并非如此,异常也会在 ScheduledExecutorService
的内部丢失。您的应用程序永远不会发现它,因为它发生在单独的线程上。
因此,您必须致力于一种设计,捕获任务内的所有内容,并通过某种机制将异常分派(dispatch)给应用程序,例如调用专用的ExceptionCallback
。
关于java - 从 ScheduledExecutorService 中提取异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17527561/