我有一个处理负荷巨大的类,为此,我对每种任务类型都使用了阻塞队列。
只要队列中有东西,就递归处理队列,下一个任务将被发送并发送出去进行处理。
作为代码示例,它类似于(请注意我使用Scala )
def executeNextTask(taskTypeId: String, task: SomeObjectType) = {
if(aTaskIsNotInProceesing(taskTypeId)){
CompletableFuture.supplyAsync(task, executorService)
.thenAccept(executeNextTask(taskTypeId))
}
}
问题在于supplyAsync
内可能会发生一些错误,并且由于执行者服务,它们被吞下了,我无法捕捉到。有时,该应用程序没有响应,我的猜测很可能是由于执行程序四处徘徊。
值得一提的是,一切都在Java EE生态系统内发生。
我对您的问题是,如何安全地捕获错误以及如何保护代码一致?