ConcurrentHashMap
この例外が何回発生したかを認識できるように、発生した例外の数と例外の名前をすべて収集しようとしています。
したがって、キャッチブロックには、例外の名前を追加し続けるマップがあり、そこに合計カウントが発生します。
以下は、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());
}
}