java - 从 ScheduledExecutorService 中提取异常

标签 java multithreading concurrency

我有一个预定的执行器,其函数连接到互联网,并且有可能抛出异常。该执行器是我正在开发的 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/

相关文章:

用于多个相同任务的 Java 线程池

java - 在 Web 应用程序中运行 ScheduledExecutorService 是否有任何影响

Java 泛型 : Type cast issue (ClassCastException)

java - 为什么我的 JDBC 准备语句更新没有更新数据库?

Java:InputStream read() 返回一个大于 127 的字节?

c# - 自定义 TaskScheduler、SynchronizationContext?

Java——套接字编程

java - JPA ManyToMany 注释用于不加载集合中的所有项目

mongodb - 如何在 MongoDB 中管理并发?

ios - Swift - async/await - 在 MainActor Task 的后台线程上执行异步方法