我需要编写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'; });