在更新地图和阅读地图时锁定免费解决方案



我正在尝试测量每个线程插入数据库所花费的时间。我已经在一个名为histogramConcurrentHashMap中捕获了所有这些性能数字,比如每个线程在插入时所花费的时间。

下面是我测量每个线程花费的时间并将其存储在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);
     }
}

您的代码是正确的;还有一个(更复杂的)习惯用法避免每次实例化CCD_ 10。然而,请注意,由于关键部分的持续时间非常短,"天真"的基于锁的解决方案可能也同样好。

相关内容

  • 没有找到相关文章

最新更新