为什么要直接同步ArrayList,以确保其对其他线程的可见性[重复]

问题描述 投票:1回答:1

我担心要确保其他线程仍会看到其中一个线程所做的更改

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

我曾经使用volatilelist来确保可见性,但这是不对的,因为它实际上不会影响列表的aClass元素。

我对volatile的理解是this

幸运的是,我synchronizedlist的所有读取和写入,这是通过使用迭代器进行的

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

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

由线程添加的值在进入同步块的所有其他线程中可见

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

java multithreading list
1个回答
0
投票

已经回答here

© www.soinside.com 2019 - 2024. All rights reserved.