1
說我有下面的類如何將普通的舊Java類變爲原子類?
public class Hello {
private int first = 0;
private String result = "";
private Queue<Integer> queue1 = new Queue<>();
private Queue<Integer> queue2 = new ConcurrentLinkedQueue<>();
public int getFirst() {
return first;
}
public void setFirst(int first) {
this.first = first;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.first = first;
}
public void addQueue1(int number) {
queue1.add(number);
}
public void addQueue12(int number) {
queue2.add(number);
}
}
現在假設多個線程要修改這個類的一個實例。有沒有辦法讓我可以把這個整個類Atomic而不是使用synchornized關鍵字?換句話說多線程可以調用任何getter或setter,但實例需要被原子地修改?我怎樣才能使用AtomicReference並將其更改爲線程安全類?
看看Java原子包(https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/package-summary.html) - AtomicReference可能會做你所想想要,但我不確定他們是否能夠滿足您在原子更新方面的需求(與原子訪問相對) – romeara
是否有任何不變量會影響您的屬性?必須同時改變並保持其關係的相關屬性。 –
@doge我會認爲是的。 – user1870400