为了账号安全,请及时绑定邮箱和手机立即绑定

synchronizedList 多线程情况下如果一个线程做循环,有可能会抛出异常,如何处理?

synchronizedList 多线程情况下如果一个线程做循环,有可能会抛出异常,如何处理?

波斯汪 2019-02-16 21:25:20
synchronizedList 多线程情况下如果一个线程做循环,有可能会抛出异常,如何处理?搞成CopyOnwriteArrayList 性能太差了 synchronizedList里的上锁对象是mutex,如下: static class SynchronizedCollection<E> implements Collection<E>, Serializable { 。。。 final Object mutex; // Object on which to synchronize 。。。 } 如果对synchronizedList对象上锁,和在mutex上上锁的add()不会互斥啊 这种情况是不是用Vector比较好?Vector的add()等方法是直接对其对象上锁的
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

没用过这个,不过看源码,synchronizedList默认的上锁对象就是当前定义的对象:

final Object mutex;     // Object on which to synchronize

SynchronizedCollection(Collection<E> c) {
    this.c = Objects.requireNonNull(c);
    mutex = this;
}

所以正常来说都是线程安全的,不清楚题主具体什么场景会出现异常,或者尝试自定义上锁对象呢,List<String> syncList = Collections.synchronizedCollection(list, mutex),源码构造方法:

SynchronizedCollection(Collection<E> c, Object mutex) {
    this.c = Objects.requireNonNull(c);
    this.mutex = Objects.requireNonNull(mutex);
}
查看完整回答
反对 回复 2019-03-01
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

synchronizedList你没贴出这个类的代码.

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 411 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信