This question already has an answer here:
Garbage collection and synchronized visibility
(1个答案)
4个月前关闭。
我担心要确保其他线程仍会看到其中一个线程对
我曾经使用volatile与list来尝试确保可见性,但这是不对的,因为它实际上不会影响list的aClass元素。
我对volatile的理解是this。
幸运的是,我将所有读取和写入操作同步到列表,这是通过使用迭代器实现的
现在,我不使用volatile来确保可见性;我解释了接受的答案here。在该问题中,OP不使用易失性,仅使用同步,并且答案表明
线程添加的值对于进入同步块的所有其他线程变为可见
因为这个答案,我对Synchronized感到满意。我知道同步确保不会同时发生来自不同线程的2次读写,但是为什么要确保线程之间的可见性?
(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的建议,我才意识到它的答案。