Я пытаюсь измерить, сколько времени каждый поток занимает вставку в базу данных. Я записал все эти показатели производительности в карту с именем ConcurrentHashMap
, например, сколько времени каждый поток тратит на вставку. В этой параллельной хеш-карте это будет примерно так.
Key- 10
Value- 2
Это означает, что 2 вызова вернулись за 10 мс. Другой пример ниже
Key - 20
Value -1
что означает, что 1 вызов вернулся через 20 мс.
И эта карта будет содержать гораздо больше данных, что означает гораздо больше пар ключ-значение.
Итак, теперь я пытаюсь сделать что-то вроде приведенного ниже, используя ту же карту, что и выше, это означает, что мне нужно повторить приведенную выше карту, чтобы получить приведенные ниже числа в этом конкретном диапазоне. Это возможно сделать?
How many calls(X number) came back in between 1 and 20 ms
How many calls(X number) came back in between 20 and 40 ms
How many calls(X number) came back in between 40 and 60 ms
How many calls(X number) came back in between 60 and 80 ms
How many calls(X number) came back in between 80 and 100 ms
How many calls(X number) came back after 100 ms
Какой-то код, о котором я думал изначально.
SortedSet<Long> keys = new TreeSet<Long>(map.keySet());
for (Long key : keys) {
System.out.print(key + " : ");
for (int i = 0; i < map.get(key); i++) {
// Not sure what I am supposed to do here?
}
System.out.println();
}
Может ли кто-нибудь помочь мне здесь?
Обновление:-
Моя примерная стоимость карты-
{31=3, 48=1, 33=1, 30=12, 43=1, 38=1, 32=1}
Это означает, что общий вызов составил 3+1+1+12+1+1+1 = 20
, если добавить value
из map
.
И из этого мне нужно выяснить, что приведенный выше сценарий означает что-то вроде этого
How many calls(X number) came back in between 1 and 20 ms
How many calls(X number) came back in between 20 and 40 ms
How many calls(X number) came back in between 40 and 60 ms
How many calls(X number) came back in between 60 and 80 ms
How many calls(X number) came back in between 80 and 100 ms
How many calls(X number) came back after 100 ms
Ниже приведен мой код, который я пробовал с приведенным ниже предложением:
private static void drawHistogram (карта карты) {
int counter[] = new int[6];
for (Integer key : map.keySet()) {
System.out.println("" + key);
// add sample
int idx = key / 20;
idx = Math.min(idx, counter.length - 1);
counter[idx]++;
}
for (int i = 0; i < counter.length; i++) {
System.out.println(counter[i] + " came back in between " + i * 20 + " and " + (i + 1) * 20
+ " ms");
}
}
Как вы можете видеть, у меня было сделано 20 звонков, но это показывает только 7 звонков. Что-то не так я сделал? Это результат, который я получил-
0 came back in between 0 and 20 ms
5 came back in between 20 and 40 ms
2 came back in between 40 and 60 ms
0 came back in between 60 and 80 ms
0 came back in between 80 and 100 ms
0 came back in between 100 and 120 ms
который показывает только 7 вызовов. Но есть 20 звонков.