各スレッドがデータベースに挿入するのにかかる時間を測定しようとしています。各スレッドが挿入にかかる時間のように、これらすべてのパフォーマンス数値をConcurrentHashMap
名前付きでキャプチャしました。histogram
以下は、各スレッドにかかる時間を測定し、スレッドをに保存しているコードです。ConcurrentHashMap
class Task implements Runnable {
public static ConcurrentHashMap<Long, AtomicLong> histogram = new ConcurrentHashMap<Long, AtomicLong>();
@Override
public void run() {
try {
long start = System.nanoTime();
preparedStatement.executeUpdate(); // flush the records.
long end = System.nanoTime() - start;
final AtomicLong before = histogram.putIfAbsent(end / 1000000, new AtomicLong(1L));
if (before != null) {
before.incrementAndGet();
}
}
}
}
だから私の質問は、各スレッドにかかる時間を測定し、それらすべての数値をConcurrentHashMap
スレッドセーフにする方法があるかどうかです。
私の全体の更新操作はAtomic
です。そして、私の操作全体がそうでない場合、これよりも優れたアプローチがあるかどうかを確認したかっただけですAtomic
。私は主に探していlock free solution
ます。
そして、すべてのスレッドがそこでタスクの実行を終了した後、このHistogram
マップをとして作成したので、メインメソッドからこのマップを印刷していますStatic
。それで、この方法は正しいかどうか?
public class LoadTest {
public static void main(String[] args) {
//executing all the threads using ExecutorService
//And then I am printing out the historgram that got created in Task class
System.out.println(Task.histogram);
}
}