Mac*_*Mac 3 java mutable atomicinteger
我有以下几种情况:我在这里展示的是简单的代码形式,以澄清我的担忧:
public void callMe()
{
AtomicInteger howManyOdds = new AtomicInteger(0);
AtomicInteger howManyEvens = new AtomicInteger(0);
loopThrough(100,howManyOdds,howManyEvens);
System.out.println(howManyOdds.get()+" "+howManyEvens.get());
}
private void loopThrough(int counter,AtomicInteger howManyOdds,AtomicInteger howManyEvens)
{
for(int i = 1 ; i <= counter ;i++)
{
if(i%2 == 0)
howManyEvens.getAndAdd(1);
else
howManyOdds.getAndAdd(1);
}
}
Run Code Online (Sandbox Code Playgroud)
我知道它可以通过int[]但它看起来有点奇怪.在这种情况下,AtomicInteger是Mutable Integer的良好替代品吗?如果不是那么为什么?
我认为这不是一个好主意:AtomicInteger在不具有内在并发性的上下文中使用会误导读者.
使用数组也不是一个好主意,即使从技术上来说它运作良好.问题在于,结果代码不是太具描述性,因为索引与其含义的"映射"(即0- >奇数,1- >偶数)在API本身中是不可见的.
使用包含两个属性的可变类会更好:
public class OddEven {
int odd, even;
public int getOdd() {return odd;}
public int getEven() {return even;}
public void incOdd() {odd++;}
public void incEven() {even++;}
}
Run Code Online (Sandbox Code Playgroud)
这实现了非常好的可读性,而不会产生错误的印象,即在场景后面发生并发事件.
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |