首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步采集吸气器

同步采集吸气器
EN

Stack Overflow用户
提问于 2017-04-17 17:25:41
回答 2查看 171关注 0票数 0

IIUC,一个只被synchronized方法访问的synchronized应该是线程安全的,对吗?

例如,

代码语言:javascript
复制
class Foo {
  private List<String> mList = new LinkedList<>();
  public synchronized List<String> getList() {
    return mList;
  }
}

假设这个getter专门用于访问列表--所有操作都是通过getList()进行的--我觉得它应该是线程安全的--但是我很高兴被告知我错了。

TYIA

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-17 17:32:04

这很可能是不够的,因为它只是返回List的一个引用;多个线程仍然能够并发地修改它,从而导致竞争条件。如果您正在寻找一个完全同步的List,那么我建议使用一个与Collections#synchronizedList包装的ArrayList

票数 1
EN

Stack Overflow用户

发布于 2017-04-17 18:38:39

如果您有更多的读取而不是写入,最好选择CopyOnWriteArrayList,因为它的同步化以及CopyOnWriteArrayList的迭代器是故障安全,不会抛出ConcurrentModificationException。

您还可以使用Collections.synchronizedList( list )使现有列表同步,但是Iterator将失败-快速。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43456272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档