我担心要确保其他线程仍会看到其中一个线程所做的更改
static ArrayList<aClass> list = new ArrayList<aClass>();
我曾经使用volatile和list来确保可见性,但这是不对的,因为它实际上不会影响列表的aClass元素。
我对volatile的理解是this。
幸运的是,我synchronized对list的所有读取和写入,这是通过使用迭代器进行的
Iterator<aClass> iter = list.iterator();
while( iter.hasNext() ) {
aClass aClassReference = iter.next();
...
现在我不使用volatile来确保可见性;我解释了接受的答案here。在该问题中,OP不使用volatile,而仅使用同步,并且答案表明
由线程添加的值在进入同步块的所有其他线程中可见
由于这个答案,我对同步化感到很满意。我知道synchronized确保不会同时发生来自不同线程的2次读/写,但是为什么要确保线程之间的可见性?
已经回答here。