Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么直接同步ArrayList可以确保它对其他线程的可见性_Java_Multithreading_List - Fatal编程技术网

Java 为什么直接同步ArrayList可以确保它对其他线程的可见性

Java 为什么直接同步ArrayList可以确保它对其他线程的可见性,java,multithreading,list,Java,Multithreading,List,我关心的是确保其他线程仍能看到其中一个线程对的更改 static ArrayList<aClass> list = new ArrayList<aClass>(); 静态数组列表 幸运的是,我使用迭代器同步了对列表的所有读写操作 Iterator<aClass> iter = list.iterator(); while( iter.hasNext() ) { aClass aClassReference = ite

我关心的是确保其他线程仍能看到其中一个线程对的更改

static ArrayList<aClass> list = new ArrayList<aClass>();
静态数组列表

幸运的是,我使用迭代器同步了对列表的所有读写操作

Iterator<aClass> iter = list.iterator(); 
        while( iter.hasNext() ) {
            aClass aClassReference = iter.next();
            ...
迭代器。在这个问题上,OP没有使用volatile,只使用synchronized,答案是

由线程添加的值对于进入同步块的所有其他线程都可见

因为这个答案,我觉得和Synchronized在一起很舒服。我知道synchronized可以确保不同线程的2次读写不会同时发生,但为什么它可以确保线程之间的可见性呢?

已经回答了

直到我写下问题并看到SO的建议,我才意识到问题已经得到了回答。

已经回答了


直到我写下问题并看到SO的建议,我才意识到答案。

为了保证数组元素的可见性,我们必须依赖于诸如synchronized关键字、原子变量或ReentrantLock之类的机制。为了保证数组元素的可见性,我们必须依赖于诸如synchronized关键字、原子变量、,或可重入锁定。