我有一个预定的执行程序,其功能连接到互联网并有可能抛出和异常。此执行程序是我正在开发的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?
答案 0 :(得分:2)
一旦任务抛出异常,它就结束了:它不会被重新安排。即使不是这样,例外也会在ScheduledExecutorService
的内脏中消失。您的应用程序永远不会发现它,因为它发生在一个单独的线程上。
因此,您必须努力设计一个能够捕获任务中的所有内容的设计,并通过某种机制将异常调度到应用程序,例如调用专用的ExceptionCallback
。