我有一個類,例如:如何使用AtomicInteger?
public class A{
private final int number;
public A(int number){
this.number = number;
}
}
Quesiton是,我想更新number
時間的時候,我必須做一個對象無狀態,這意味着nubmer
必須是最後的。我的朋友建議我使用AtomicInteger
班,但我不知道如何使其工作。
我有一個類,例如:如何使用AtomicInteger?
public class A{
private final int number;
public A(int number){
this.number = number;
}
}
Quesiton是,我想更新number
時間的時候,我必須做一個對象無狀態,這意味着nubmer
必須是最後的。我的朋友建議我使用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;
}
}
對於無國籍的對象,我認爲你誤解了它的含義。
帥哥,感謝您的回覆,建議使用'final AtomicInteger i',引用永遠不會改變,但是對象中的值可能會改變。但我不知道這有什麼好處。 –
你究竟想在這裏做什麼? –
擁有一個AtomicInteger不會使該類無狀態。更新整數,無論是否爲原子,都會改變實例的內部狀態。
您可以使該類不可變,即狀態不能更改,併爲每個狀態更改創建一個新實例。例如:
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);
}
}
傢伙,感謝您的回覆,建議使用最終的AtomicInteger我,引用永遠不會改變,但對象中的值可能會改變。但我不知道這有什麼好處。 –
'final'將使屬性不可變。無狀態依賴於上下文,也就是你用'number'做什麼 - 你可以用一個'A'來執行一個opterion,它不會在操作之前使A處於一個可區分的狀態,所以它將是無狀態的從某種意義上說 - 但這又取決於你需要定義的意義。 –
嗯..如果它包含一個可變狀態,A怎麼可能是無狀態的? – ZhongYu
「我想每次更新數字時間,並且我必須讓一個對象成爲無狀態的」< - 您不能同時擁有這兩個對象。這感覺像是[X-Y問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem);你最近想做什麼?你正在解決的背景和問題是什麼? –