如果它们被不同的线程更新和读取,我是否需要同步CopyOnWriteArrayList中的项目?

时间:2014-04-09 16:47:43

标签: java multithreading thread-safety

如果我使用CopyOnWriteArrayList在线程之间共享一个项目列表,我是否需要同步这些项目(如果它们被不同的线程更新和读取?)

目前我的项目类定义如下。我是否需要为每个getter和setter添加synchronized?

基本上我想确保一个线程的更改在另一个线程中可见 - 我认为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;
    }
}

1 个答案:

答案 0 :(得分:0)

由于您的CopyOnWriteArrayList包含可变项,因此您需要完全同步项类。想象一下,两个线程访问列表中的相同项目(安全列表操作),然后操纵此项目(不安全)。