当前位置: 首页 > 面试题库 >

ThreadPools中的异常处理

秦俊豪
2023-03-14
问题内容

我有一个ScheduledThreadPoolExecutor,似乎正在吃异常。如果提交的Runnable引发异常,我希望我的执行者服务通知我。

例如,我希望下面的代码至少输出IndexArrayOutOfBoundsException的stackTrace

threadPool.scheduleAtFixedRate(
  new Runnable() {
    public void run() {
      int[] array = new array[0];
      array[42] = 5;
    }
  },
  1000,
  1500L,
  TimeUnit.MILLISECONDS);

作为附带问题。有没有办法为ScheduledThreadPoolExecutor编写常规try catch块?

//////////原始问题的结尾///////////////

如建议的那样,以下装饰器效果很好。

public class CatcherTask implements Runnable{

    Runnable runMe;

    public CatcherTask(Runnable runMe) {
        this.runMe = runMe;
    }

    public void run() {
        try {
            runMe.run();
        } catch (Exception ex){
            ex.printStackTrace();
        }
    }
}

问题答案:

不久前,我写了一篇关于这个问题的小文章。您有两种选择:

  1. 使用Colin Herbert提供的解决方案或
  2. 使用Mark Peters 解决方案的修改版本,但无需分配,而是UncaughtExceptionHandler将每个提交的可运行对象包装到自己run的可运行组件中,该可运行组件在try-catch-block中执行(调用)真正的可运行组件。

编辑
正如Mark所指出的,重要的是将Runnable传递给ScheduledExecutorService而不是传递给ThreadFactory



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

  • 我创建了简单的MailService来通过电子邮件发送内容。它工作但我不知道如何处理异常(我的想法是在HTML视图中打印一些信息或在404页重定向) 邮件服务: 在控制器中的用法:

  • 我需要在我的应用程序中将异常显示为toast消息,但以下代码不起作用,我如何修改它? 10-14 23:41:21.637 14498-14498/com.example.username.weddingplanningE/SQLiteDatabase︰错误插入name=dandroid.database.sqlite.SQLiteConstraintExc0019:列名称不是唯一的(代码19)在

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

  • 我正在使用Java的executor服务特性。我想了解设计视角。 如果其中一批出现问题,最好的处理方法是什么? 我正在创建固定线程池, 此外,我正在使用invokeall()调用所有返回未来对象的可调用对象。 我的设想是 > 我有1000条来自xml文件的记录,我想保存到DB中。我创建了10个批次,每个批次包含100条记录。 批次开始处理(例如batch1、batch2、batch3…batch1

  • 曾发表过多篇文章,但大多数都与处理错误消息有关,而不是处理过程中的异常处理。 我想知道如何处理流应用程序接收到的消息,并且在处理消息时出现异常?异常可能是由于多种原因造成的,如网络故障、RuntimeException等。, 有人能提出正确的方法吗?我应该使用setUncaughtExceptionHandler吗?还是有更好的方法