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());
}
}