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关键字、原子变量、,或可重入锁定。