Java 如何使用原子整数?

Java 如何使用原子整数?,java,atomicinteger,Java,Atomicinteger,我有一门课,例如: public class A{ private final int number; public A(int number){ this.number = number; } } 问题是,我想一次一次地更新number,我必须使对象无状态,这意味着numer必须是最终的。我的朋友建议我使用AtomicInteger类,但我不知道如何使它工作。AtomicInteger是线程安全的,您应该这样使用它: public class At

我有一门课,例如:

public class A{
    private final int number;

    public A(int number){
         this.number = number;
    }
}

问题是,我想一次一次地更新
number
,我必须使对象无状态,这意味着
numer
必须是最终的。我的朋友建议我使用
AtomicInteger
类,但我不知道如何使它工作。

AtomicInteger是线程安全的,您应该这样使用它:

public class Atomic{
  private AtomicInteger number;

  public Atomic(int number){
       this.number = new AtomicInteger(number);
  }

  public int getNumber() {
    return number.get();
  }

  public void setNumber(int number) {
    this.number.set(number);;
  }

}
但如果您想使某些内容成为最终版本,则不应使用AtomicInteger,并且最终版本必须在编译时已知,因此您的解决方案是封装,就像您所做的那样:

public final class Atomic{
  private int number;

  public Atomic(int number){
       this.number = number;
  }

  public int getNumber() {
    return this.number;
  }
}

对于无状态对象,我认为您误解了它的含义。

拥有原子整数不会使类成为无状态。更新整数(原子或非原子)将更改实例的内部状态

您可以使类不可变,即状态不能更改,并为每个状态更改创建一个新实例。例如:

public class A {
    private final int number;
    public A(int n) {
        number = n;
    }
    public int getNumber() {
        return number;
    }
    public A setNumber(int n) {
        return new A(n);
    }
}

final
将使属性不可变。无状态取决于上下文,即您正在使用
number
执行的操作-您可以使用
A
执行opterion,该操作与操作之前的
A
状态不同,因此从某种意义上说它是无状态的-但这同样取决于您需要定义的意义。嗯。。如果一个对象包含一个可变的状态,它怎么可能是无状态的呢?“我想一次一次地更新数字,而且我必须使一个对象成为无状态的”嗨,伙计们,我想我需要做的是将
int
转换为
AtomicInteger
,这样,它对调试更加友好。伙计,谢谢你们的回复,建议使用最终的原子整数i,引用永远不会更改,但对象中的值可能会更改。但是我不知道这有什么好处。盖伊,谢谢你的回复,建议使用
最终原子整数I
,引用永远不会更改,但对象中的值可能会更改。但我不知道这有什么好处。你到底想做什么?盖伊,谢谢你的回答,建议使用最终的原子整数I,引用永远不会改变,但对象中的值可能会改变。但我不知道这有什么好处。