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

计算catch块中发生的异常数

章岳
2023-03-14
问题内容

我正在尝试收集所有发生的异常计数和a中的异常名称,ConcurrentHashMap以便我应该知道该异常发生了多少次。

因此,在我的catch块中,我有一个映射,该映射将继续添加异常名称,并且总计数出现。

下面是我which I have modified to always throw SQL Exception每次用于测试目的的代码,以便我可以看到异常计数是否正确。

所以某些情况下

1)如果我将线程10数选择为,将任务数选择为50,则在该图中,我可以看到该特定字符串的500个异常

2)但是,如果我选择的线程40数和任务数一样,500那么20000在该映射中看不到异常,它会显示19000

我的问题是为什么?我在这里做什么错?

class Task implements Runnable {

     public static final AtomicInteger counter_exception = new AtomicInteger(0);
     public static ConcurrentHashMap<String, Integer> exceptionMap = new ConcurrentHashMap<String, Integer>();

     @Override
     public void run() {

     try {

          //Making a db connection and then executing the SQL-

         } catch (SQLException e) {
               exceptionMap.put(e.getCause().toString(), counter_exception.incrementAndGet());
          } catch (Exception e) {

          }
     }

    }

更新:

如果我有类似的内容,我将Null Pointer Exception获得40个线程和4000个任务。为什么?

catch (SQLException e) {

synchronized(this) {
                   exceptionMap.put(e.getCause().toString(), counter_exception.incrementAndGet());
}              
}

问题答案:

也许正在发生这样的事情:

任务1-500:捕获异常,准备调用exceptionMap.put,从中获取counter_exception.incrementAndGet()传递给所述方法的数字

任务500:安排了原子整数计数器的数字500,因此它exceptionMap.put首先运行

任务1:已安排原子整数计数器的数字1,因此将其exceptionMap.put最后运行

现在,即使计数器为500,并且我们有500个异常,该异常消息仍与1关联,因为该消息是最近执行的。



 类似资料:
  • 问题内容: 通常,我会遇到必须吞下/ 块中清理代码所引发的异常以防止原始异常被吞咽的情况。 例如: 假设记录任何异常不是方法块范围内的选项,而是由调用and 方法的代码完成。 吞没和方法抛出的异常是一个好主意吗?如果没有,什么是处理上述情况的更好方法,以免吞下异常? 问题答案: 我不喜欢捕捉和抛出异常。 如果你抓住它,做 一些 与它-即使它只是记录例外。 如果您不能执行任何操作,请不要捕获它-在方

  • 问题内容: 可以在Swift中捕获异常吗?给出以下代码: 是否可以防止异常导致整个程序崩溃?也就是说,Objective-C中的Swift等效于什么: 问题答案: 它没有异常处理,并且在开发人员论坛中的讨论讨论了为什么会这样: 但请记住,可可和可可触控传统上并不打算让您捕获异常。他们打算让您不要将它们放在首位。普通错误应使用可选类型和inout NSError参数处理;您应该通过编写更好的代码来解

  • 本文向大家介绍C#嵌套异常并尝试catch块。,包括了C#嵌套异常并尝试catch块。的使用技巧和注意事项,需要的朋友参考一下 示例 一个能够在另一个try catch内部嵌套一个异常/块。 这样一来,您可以管理小的代码块,这些代码块可以在不破坏整个机制的情况下正常工作。 注意:抛出父catch块时,避免吞咽异常

  • 我试图理解为什么下面的代码打印“我不应该被打印!!" try块中的代码抛出一个错误,当它的errorAction变量被设置为stop时,Ppowershell将执行相应的catch块。 在catch中,测试函数调用将失败(因为测试函数参数属性validateSet不包括“facdfsd”)并抛出明显不终止的异常:ParameterArgumentValidationError 我现在期望执行在测试

  • 这个块似乎没有捕获发生的错误,这很奇怪,考虑到我对网站的注册部分有一个类似的块。这将处理登录。该错误发生在第三行 并引发此错误: 当电子邮件格式错误时会发生这种情况,例如。因此,当它是时,我希望在块中设置错误消息。 有人知道为什么这个< code>try catch不起作用吗?

  • 问题内容: 我正在检查Java SE7的新功能,目前我正在: http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch- multiple.html 关于捕获多个功能,当我遇到以下语句时: 注意:如果catch块处理多个异常类型,则catch参数隐式为final。在此示例中,catch参数ex是最终的,因此您不能在ca