0
如果我使用CopyOnWriteArrayList共享線程之間的項目列表,我是否還需要同步項目(如果它們由不同線程更新和讀取)?我是否需要同步CopyOnWriteArrayList中的項目,如果它們由不同的線程更新和讀取?
目前我的商品類定義如下。我是否需要將同步添加到每個getter和setter?
基本上我想有一個線程,以確保更改是在另一個線程可見的 - 我想的CopyOnWriteArrayList會提供一個內存屏障,以確保這一點,但我想肯定 - 感謝
public class MyClass {
private String string;
private Long longObj;
private long longprim;
public String getString() {
return string;
}
public void setString(String string) {
this.string = string;
}
public Long getLongObj() {
return longObj;
}
public void setLongObj(Long longObj) {
this.longObj = longObj;
}
public long getLongprim() {
return longprim;
}
public void setLongprim(long longprim) {
this.longprim = longprim;
}
}
'CopyOnWriteArrayList'的實例可能沒問題,但如果同時修改'MyClass'的實例則不會。 –
你需要同步CopyOnWrite操作 – Mzf
你在問什麼? 'CopyOnWriteArrayList'是線程安全的。你可以在多線程中使用它。如果'add'很常見 - 非常緩慢 - 在這種情況下,'ConcurrentLinkedQueue'快得多。 'MyClass'不是線程安全的,如果你用多線程對它們進行變異,那麼通常的可見性和原子性告誡應用,就像在多個線程之間共享單個實例一樣。 –