gpt4 book ai didi

java - 使用 AtomicInteger 代替可变整数是一种好习惯吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:26:36 26 4
gpt4 key购买 nike

我有以下几种情况:我在这里展示的是一种简单的代码形式,以澄清我的担忧:

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

这实现了非常好的可读性,而不会造成幕后正在发生某些并发事情的错误印象。

关于java - 使用 AtomicInteger 代替可变整数是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23201468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com