当前位置: 首页 > 知识库问答 >
问题:

java中的Executorservice异常处理

斜单鹗
2023-03-14

我正在使用Java的executor服务特性。我想了解设计视角。

如果其中一批出现问题,最好的处理方法是什么?

我正在创建固定线程池,

ExecutorService pool = Executors.newFixedThreadPool(10);

此外,我正在使用invokeall()调用所有返回未来对象的可调用对象。

我的设想是

>

  • 我有1000条来自xml文件的记录,我想保存到DB中。我创建了10个批次,每个批次包含100条记录。

    批次开始处理(例如batch1、batch2、batch3…batch10),并假设其中一个批次(batch7)在从xml解析记录时遇到特定记录的错误,并且无法保存到DB中。

    >

    如何获取/存储失败的批次信息(上述批次7)?

    我的意思是,如果任何批次有任何错误,我应该停止所有其他批次吗?

  • 共有3个答案

    司知
    2023-03-14

    所以我的问题是我如何处理这种情况?

    这完全取决于你的要求。

    如何获取/存储失败的批次信息(上述批次7)?

    您可以将其存储在文件或数据库中。

    我的意思是,如果任何批次有任何错误,我应该停止所有其他批次吗?

    这取决于您的业务用例。如果您需要停止批次处理作业,即使单个批次失败,您也必须停止下一批。否则,您可以继续下一组批次。

    或者,我可以在哪里存储失败批次的信息,以及如何在更正错误后将其用于进一步处理?

    这也取决于您的要求

    西门品
    2023-03-14

    您应该使用CompletableFuture来执行此操作

    使用CompletableFuture。runAsync()要异步启动进程,它将返回未来。在将来,您可以使用<代码>然后接受(…) 或<代码>然后运行(…) 过程完成时执行操作的方法。

    还有一种方法,<代码>例外(…) 在引发异常时执行某些操作。

    默认情况下,它使用默认的执行器服务来异步执行此操作,但如果需要,您可以使用自己的服务。

    张腾
    2023-03-14

    具有处理记录逻辑的处理程序应该有一个存储批号的变量。

    理想情况下,处理程序应该有一个有限的重试逻辑来处理少量的数据库错误。

    一旦重试计算了耗尽,它就需要人工干预,并且应该退出抛出异常和批号。理想情况下,执行程序应该调用ShutDown。如果您的逻辑要求立即停止该过程,那么您应该调用ShutDownNow。理想情况下,您的设计应该对此类失败具有抵抗力,并让其他批次继续工作,即使其中一个失败。希望它对您有所帮助

     类似资料:
    • 问题内容: 我正在尝试使用Java的类来运行大量具有固定数量线程的重量级任务。每个任务都有很多地方,在这些地方可能会由于异常而失败。 我已经继承了子类,并且重写了应该提供运行任务时遇到的任何未捕获异常的方法。但是,我似乎无法使其工作。 例如: 该程序的输出是“一切都很好-情况正常!” 即使唯一提交给线程池的Runnable引发异常。任何线索这里发生了什么? 谢谢! 问题答案: 提交Runnable

    • 本文向大家介绍Java 中的异常处理?相关面试题,主要包含被问及Java 中的异常处理?时的应答技巧和注意事项,需要的朋友参考一下  Java异常类层次结构图 在 Java 中,所有的异常都有一个共同的祖先java.lang包中的 Throwable类。Throwable: 有两个重要的子类:Exception(异常) 和 Error(错误) ,二者都是 Java 异常处理的重要子类,各自都包含大

    • 问题内容: 我目前正在学习如何正确执行自定义异常的过程,偶然发现了一个问题。每当我尝试利用引发此自定义异常的类的对象时,IDE的调试器(我使用的是IntelliJ想法)都会说“未处理的异常:InsertExceptionName()”。代码以简化的方式看起来像这样。在这种情况下,如果随机生成的数字<0.5,它将返回一个异常,否则返回一个数字,但不会这样做。我想念什么? -- -- 问题答案: 您是

    • 问题内容: 我正在研究用于并行计算JavaSeis.org的软件开发框架。我需要一个强大的机制来报告线程异常。在开发过程中,了解异常来自何处具有很高的价值,因此我想在过度报告方面犯错。我还希望能够在线程中处理Junit4测试。下面的方法是合理的还是有更好的方法? 问题答案: 我不相信在使用时有标准的“钩子”来获取这些异常。但是,如果您需要支持(听起来很合理,假设您使用),则始终可以包装Callab

    • 主要内容:异常简介,异常类型很多事件并非总是按照人们自己设计意愿顺利发展的,经常出现这样那样的异常情况。例如: 你计划周末郊游,计划从家里出发→到达目的→游泳→烧烤→回家。但天有不测风云,当你准备烧烤时候突然天降大雨,只能终止郊游提前回家。“天降大雨”是一种异常情况,你的计划应该考虑到这样的情况,并且应该有处理这种异常的预案。 计算机程序的编写也需要考虑处理这些异常情况。 异常(exception)是在运行程序时产生的一种异

    • 我期望第1行捕获从第0行抛出的NullPointerException,但它没有发生。 但为什么呢?。 当定义了另一个catch块时,为什么第1行的NPE处理程序不能捕获它? 是因为“投掷”直接进入main()方法吗?