加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用AtomicInteger作为可变整数的替代是一种好习惯吗?

发布时间:2020-12-15 04:19:40 所属栏目:Java 来源:网络整理
导读:我有以下几种情况: 我在这里展示的是一种简单的代码形式,以澄清我的担忧: public void callMe(){ AtomicInteger howManyOdds = new AtomicInteger(0); AtomicInteger howManyEvens = new AtomicInteger(0); loopThrough(100,howManyOdds,howManyEvens); Sy
我有以下几种情况:
我在这里展示的是一种简单的代码形式,以澄清我的担忧:

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);
 }
}

我知道它可以通过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++;}
}

这实现了非常好的可读性,而不会产生错误的印象,即在场景后面发生并发事件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读