IIUC,一个只被synchronized方法访问的synchronized应该是线程安全的,对吗?
例如,
class Foo {
private List<String> mList = new LinkedList<>();
public synchronized List<String> getList() {
return mList;
}
}假设这个getter专门用于访问列表--所有操作都是通过getList()进行的--我觉得它应该是线程安全的--但是我很高兴被告知我错了。
TYIA
发布于 2017-04-17 17:32:04
这很可能是不够的,因为它只是返回List的一个引用;多个线程仍然能够并发地修改它,从而导致竞争条件。如果您正在寻找一个完全同步的List,那么我建议使用一个与Collections#synchronizedList包装的ArrayList。
发布于 2017-04-17 18:38:39
如果您有更多的读取而不是写入,最好选择CopyOnWriteArrayList,因为它的同步化以及CopyOnWriteArrayList的迭代器是故障安全,不会抛出ConcurrentModificationException。
您还可以使用Collections.synchronizedList( list )使现有列表同步,但是Iterator将失败-快速。
https://stackoverflow.com/questions/43456272
复制相似问题