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

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()等方法是直接对其对象上锁的

波斯汪
浏览 462回答 3
3回答

冉冉说

没用过这个,不过看源码,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); }

海绵宝宝撒

synchronizedList你没贴出这个类的代码.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java