Liczenie liczby wyjątków występujących w bloku catch

Próbuję zebrać wszystkie występujące wyjątki i nazwę wyjątku w aConcurrentHashMap więc powinienem wiedzieć, ile razy wystąpił ten wyjątek.

Tak więc w moim bloku catch mam mapę, która będzie dodawać nazwę wyjątku i występowanie całkowitej liczby.

Poniżej znajduje się mój kodwhich I have modified to always throw SQL Exception za każdym razem do celu testowania, aby zobaczyć, że liczba wyjątków jest dokładna lub nie.

Tak więc pewien scenariusz -

1) Jeśli wybieram liczbę wątków jako10 i liczba zadań jak50, a następnie na tej mapie widzę 500 wyjątków dla tego konkretnego ciągu

2) Ale jeśli wybieram liczbę wątków jako40 i liczba zadań jak500 potem nie widzę20000 wyjątki na tej mapie, to pokazuje19000.

Moje pytanie brzmi: dlaczego? Co ja tu robię?

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) {

          }
     }

    }

Zaktualizowano:

Jeśli mam coś takiego - dostajęNull Pointer Exception na 40 wątków i 4000 zadań. Czemu?

catch (SQLException e) {

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

questionAnswers(2)

yourAnswerToTheQuestion