Java Integer累加器优化

时间:2015-11-17 23:14:54

标签: java multithreading concurrency concurrentmodification

我需要编写Integer Accumulator。在高线程争用下,实现需要线程安全且高效。

用法示例:

firstSum

在这种情况下,secondSum的值为6,total为4,accumulator.reset()的值为10。 调用total会将public class AccumulatorSum implements Accumulator{ private ReadWriteLock rwlock = new ReentrantReadWriteLock(); private Integer totalSum = 0; @Override public int accumulate(int... values) { int sum = 0; for(int v : values){ sum += v; } rwlock.writeLock().lock(); try { totalSum += sum; } finally { rwlock.writeLock().unlock(); } return sum; } @Override public int getTotal() { rwlock.readLock().lock(); try { return totalSum; } finally { rwlock.readLock().unlock(); } } @Override public void reset() { rwlock.writeLock().lock(); try{ totalSum = 0; } finally { rwlock.writeLock().unlock(); } } 值重置为0.

以下代码是我设法做的事情。你认为它是线程安全的,保证一致性和足够的效率吗?

感谢您的帮助!

var pack = d3.layout.pack()
  .size([packSize, packSize])
  .value(function(d) { return d.size; });

var svg = d3.select('#svg_' + zone.id);
svg.selectAll('*').remove();

svg = svg.attr('width', diameter)
  .attr('height', svg_height)
  .append('g')
  .attr('transform', 'translate(2,20)');

var node = svg.datum(d3data).selectAll('.node')
  .data(pack.nodes, function(d) {return d.id;})
  .enter().append('g')
  .attr('class', function(d) { return d.children ? 'node' : 'leaf'; });

0 个答案:

没有答案