This question already has an answer here:
Garbage collection and synchronized visibility
                                
                                    (1个答案)
                                
                        
                                4个月前关闭。
            
                    
我担心要确保其他线程仍会看到其中一个线程对

static ArrayList<aClass> list = new ArrayList<aClass>();


我曾经使用volatile与list来尝试确保可见性,但这是不对的,因为它实际上不会影响list的aClass元素。

我对volatile的理解是this

幸运的是,我将所有读取和写入操作同步到列表,这是通过使用迭代器实现的

Iterator<aClass> iter = list.iterator();
        while( iter.hasNext() ) {
            aClass aClassReference = iter.next();
            ...


现在,我不使用volatile来确保可见性;我解释了接受的答案here。在该问题中,OP不使用易失性,仅使用同步,并且答案表明


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


因为这个答案,我对Synchronized感到满意。我知道同步确保不会同时发生来自不同线程的2次读写,但是为什么要确保线程之间的可见性?

最佳答案

已经回答here

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

10-06 12:41
查看更多